Як читати програму на C: розбір оператора printf

1

Код оманливо простий. Він виглядає як чотири рядки. Він робить одну справу. Він виводить текст на екран. Але за цією єдиною дією стоїть структурований контракт між вами, компілятором та операційною системою. Розуміння цього контракту — це перший крок до того, щоб дійсно контролювати те, що робить ваш комп’ютер, а не просто дозволяти йому виконувати скрипти за умовчанням.

Залежність від бібліотеки

Процес починається до виконання будь-якої логіки. Перший рядок #include – це не код, який виконується. Це інструкція препроцесора. Вона підключає стандартну бібліотеку вводу-виводу. Без неї компілятор не знав би, що робити з командами на зразок printf.

stdio.h розшифровується як standard input and output (стандартне введення та виведення). Вона обробляє базові операції: читання з клавіатури (стандартне введення) та запис на монітор (стандартний висновок). Вона також керує текстовими файлами на диску. У C є й інші бібліотеки, такі як string, time та math, але stdio є вхідною точкою майже для всього. Бібліотека — це заздалегідь написаний код, об’єднаний у пакет, щоб вам не доводилося винаходити велосипед заново. Ви не пишете низькорівневу обробку пам’яті для виведення тексту. Ви підключаєте пакет. Ви його використовуєте.

Точка входу

Кожна програма C повинна мати точку входу. Це функція int main(). Виконання розпочинається тут. Якщо немає main, лінковка завершується помилкою. Програми не існує.

int перед main вказує, що функція поверне після завершення. Дужки порожні, тому що ця версія не приймає аргументів. Тут усе просто. Але фігурні дужки { та }, що йдуть за ними, є обов’язковими. Вони визначають блок. Все, що всередині, належить main. Все, що зовні, ігнорується областю видимості цієї функції.

Механізм виведення

Усередині блоку ви знайдете оператор printf. Тут трапляється магія. printf надсилає дані до стандартного висновку. Більшість користувачів це означає вікно терміналу чи консоль.

Текст у лапках – це рядок формату. Вона каже printf, що саме потрібно відображати. Вона може містити літерні рядки, такі як “Hello World”. Вона може обробляти послідовності, що управляють, такі як \n для нового рядка. Вона також може використовувати наповнювачі для змінних, хоча це вже глибший рівень. Якщо ви використовуєте систему UNIX, команда man 3 printf відкриє сторінку посібника з детальним розбором специфікаторів формату. Користувачі Windows зазвичай покладаються на документацію компілятора, але основна поведінка залишається ідентичною.

Код виходу

Останній рядок – return 0;. Вона видається тривіальною. Навіщо щось повертати? Тому що процеси не працюють у вакуумі. Вони спілкуються із оболонкою (shell), яка їх запустила.

Код виходу 0 сигналізує про успіх. Це означає без помилок. Ненульове значення зазвичай вказує на збій чи конкретний код статусу. Оболонка перевіряє це значення після завершення main. Це дозволяє скриптам зчеплювати команди разом, запускаючи наступний крок лише в тому випадку, якщо попередній був успішним. Це рукостискання. Підтвердження того, що завдання виконане без збоїв.

Чому це важливо

Ви можете подумати, що це просто шаблонний код. Це негаразд. Це скелет будь-якої програми, яку ви коли-небудь напишете на C. Неправильно зрозумієте підключення бібліотеки — отримайте помилки невирішених посилань. Забудете тип значення, що повертається — компілятор видасть попередження