Дают компилятору указание читать и компилировать заголовок для библиотечных функций системы ввода/вывода.
Файлы, имена которых находятся в директивах #include, могут в свою очередь содержать другие директивы #include. Они называются вложенными директивами #include. Количество допустимых уровней вложенности у разных компиляторов может быть разным. Однако в стандарте С89 предусмотрено, что компиляторы должны допускать не менее 8 таких уровней. А в стандарте С99 предусмотрена поддержка не менее 15 уровней вложенности.
Способ поиска файла зависит от того, заключено ли его имя в двойные кавычки или же в угловые скобки. Если имя заключено в угловые скобки, то поиск файла проводится тем способом, который определен в компиляторе. Часто это означает поиск определенного каталога, специально предназначенного для хранения таких файлов. Если имя заключено в кавычки, то поиск файла проводится другим способом. Во многих компиляторах это означает поиск файла в текущем рабочем каталоге. Если же файл не найден, то поиск повторяется уже так, как будто имя файла заключено в угловые скобки.
Обычно большинство программистов имена стандартных заголовочных файлов заключают в угловые скобки. А использование кавычек обычно приберегается для имен специальных файлов, относящихся к конкретной программе. Впрочем, твердого и простого правила, по которому кавычки требуется использовать именно таким образом, не существует.
В С-программе директиву #include можно использовать не только для указания имени файла, содержащего обычный исходный текст программы, но и для указания заголовка. В языке С определен набор стандартных заголовков, содержащих необходимую информацию о различных библиотеках этого языка. Заголовок — это стандартный идентификатор, который может соответствовать имени файла, а может и не соответствовать ему. Таким образом, заголовок является просто абстракцией, которая гарантирует наличие некоторой информации. Однако на практике в языке С заголовки почти всегда являются именами файлов.
Структура программы
Все программы на языке СИ содержат директивы препроцессора, описания, определения, выражения, операторы и функции.
-Директива препроцессора.
Директива препроцессора-это команда препроцессора языка СИ (который автоматически вызывается на первом шаге компиляции программы). Две наимболее общих директивы препроцессора-это директива #define, которая подставляет текст вместо заданного идентификатора, и директива #include, которая включает в программу текст внешнего файла.
-Описания.
Описание устанавливает имена и атрибуты переменных, функций и типов, используемых в программе. Глобальные переменные описываются вне функций и действуют от конца описания до конца файла. Локальная переменная описывается внутри функции и действует от конца описания до конца функции.
-Определение.
Определение устанавливает содержимое переменной или функции. Опеределение также отводит память, требуемую для переменных и фунций. -Выражение.
Выражение-это комбинация операций и операндов, которое принимает единственное значение.
-Оператор.
Операторы управляют порядком выполнения программы на языке СИ. -Функция.
Функция-это набор описаний, определений, выражений и операторов, которое выполняет определенную задачу. Тело функции заключено в фигурные скобки. В языке СИ функции могут быть вложены друг в друга. -Функция main (главная).
Все программы на языке СИ, там где начинается выполнение программы, имеют функцию с именем main. Фигурные скобки, в которые заключено тело функции main, определяют начало и конец программы.
-Пример: Основная структура СИ-программы.
/* директивы препроцессора */
#include <stdio.h> /* подключение стандартного заголовочного
файла СИ */
#define PI 3.14 /* определение символьной константы */
float area; /* глобальное описание */
int square (int); /* прототип функции */
Main()
{ /* начало функйии main и программы */
int_radius squared; /* локальное описание */
int radius = 3; /* описание и инициализация */
radius_squared = square (radius); /* передача значения функции */
area = PI * radius_squared; /* оператор присваивания */
printf ("area: %6.2f\n", area);
} /* конец функции main и программы */
square (r) /* заголовок функции */
int r_squared; /* описания, известные только */
/* для функции square */
r_squared = r * r;
return (r_squared); /* возврат значения в вызывающее выражение */
}