int num; <-оператор объявления
Этот оператор объявляет переменную с именем num и уведомляет, что она имеет тип int (целочисленный).
num = 1; <-оператор присваивания
Оператор num = 1; присваивает значение 1 переменной по имени num.
printf("Я простой "); <-оператор вызова функции
Первый оператор, использующий функцию printf(), выводит на экран текст “Я простой ” и оставляет курсор в той же строке. Применяемая здесь функция printf() является частью стандартной библиотеки С. Она носит название функции, а использование функции в программе называется вызовом функции.
printf("компьютер.\n"); <-еще один оператор вызова функции
Следующий вызов функции printf() дописывает слово “компьютер” в конец предыдущей выведенной фразы. \n — это код, указывающий компьютеру начать новую строку, т.е. переместить курсор в начало следующей строки.
printf("Моей любимой цифрой является %d, так как она первая.\n",num);
Введение в язык С 55
Последнее использование функции printf() приводит к выводу значения переменной num (равного 1), которое вставляется внутрь фразы, заключенной в двойные кавычки. Код %d указывает компьютеру, где и в какой форме вывести значение num.
return 0; <-оператор возврата
Функция С может предоставить, или возвратить, число объекту, который ее вызвал. Пока что рассматривайте эту строку как корректный способ завершения функции main().
} <-конец программы
Как уже было сказано, программа оканчивается закрывающей фигурной скобкой.
Проход 2: нюансы программы
Теперь, когда вы вкратце ознакомились с листингом 2.1, давайте рассмотрим представленный в нем код более подробно. Мы снова будем исследовать отдельные строки программы, но на этот раз используем каждую строку кода в качестве отправной точки для более глубокого изучения нюансов, лежащих в основе кода, и как основу для того, чтобы выработать более общий взгляд на особенности программирования на С.
Директивы #include и заголовочные файлы
#include
С этой строки начинается программа. Результат выполнения #include оказывается таким же, как если бы вы ввели с клавиатуры содержимое файла stdio.h в своем файле там, где находится строка # include. В сущности, это операция вырезания и вставки. Директива include (включить файлы) представляет собой удобный способ совместного использования информации, который применяется во многих программах.
Оператор #include представляет собой пример директивы препроцессора в С. В общем случае компиляторы языка С выполняют некоторую подготовительную работу над исходным кодом перед компиляцией; это называется предварительной обработкой.
Файл stdio.h поставляется как часть всех пакетов компиляторов С. Он содержит информацию о функциях ввода и вывода, таких как printf(), и предназначен для использования компилятором. Его имя происходит от standard input/output header (заголовочный файл стандартного ввода-вывода). Разработчики языка С называют совокупность информации, которая помещается в верхней части файла заголовком, а реализации С обычно поставляются с множеством заголовочных файлов.
По большей части заголовочные файлы содержат информацию, применяемую компилятором для создания финальных исполняемых программ. Например, они мо- iyr определять константы или указывать имена функций и способы их использования. Однако фактический код функции находится в библиотечном файле предварительно скомпилированного кода, а не в заголовочном файле. Компоновщик, являющийся компонентом компилятора, позаботится о поиске необходимого библиотечного кода. Короче говоря, заголовочные файлы содействуют в правильной сборке программы.
В ISO/ANSI С стандартизировано то, какие заголовочные файлы компилятор С должен делать доступными. Для одних программ необходимо включать файл stdio.h, для других программ — нет. Документация по конкретной реализации языка С должна содержать описание функций из библиотеки С. Эти описания функций идентифицируют, какие заголовочные файлы нужны. Например, в описании функции printf() говорится о необходимости применения файла stdio.h. Пропуск подходящего зато-
56 Глава 2 ловочного файла может и не повлиять на какую-то конкретную программу, однако лучше на это не рассчитывать. Каждый раз, когда в приводимых здесь примерах используются библиотечные функции, будут применяться включаемые файлы, определенные стандартом ISO/ANSI для этих функций.
НА ЗАМЕТКУ! Почему ввод и вывод не являются встроенными
Может возникнуть вопрос, почему настолько базовые возможности, как ввод и вывод, не включены автоматически. Одна из причин связана с тем, что не все программы используют пакет ввода-вывода, а философия языка С запрещает перегружать программу ненужными функциями. Этот принцип экономного использования ресурсов делает язык С особо удобным для написания встроенных программ, например, кода для процессора, управляющего автоматизированной подачей топлива, или для проигрывателя Blu-гау-дисков. Кстати, строка с директивой # include вообще не является оператором языка С! Символ # в первой строке означает, что до передачи компилятору она должна обрабатываться препроцессором. Позже вы столкнетесь с различными примерами команд препроцессора, а в главе 16 эта тема рассматривается более подробно.
Читать дальше