2.2 Операция включения ¶
Директива ‘#include’ работает, направляя препроцессор C на сканирование указанного файла в качестве входных данных перед продолжением обработки остальной части текущего файла. Вывод препроцессора содержит уже сгенерированный вывод, за которым следует вывод, полученный из включенного файла, а затем вывод, полученный из текста после директивы ‘#include’. Например, если у вас есть файл заголовка header.h следующим образом,
char *test (void);
и главная программа с именем program.c, которая использует файл заголовка, как это:
int x;
#include "header.h"
int
main (void)
{
puts (test ());
}
компилятор увидит тот же поток токенов, что и если бы program.c прочитал
int x;
char *test (void);
int
main (void)
{
puts (test ());
}
Включаемые файлы не ограничиваются объявлениями и определениями макросов; это всего лишь типичные применения. Любой фрагмент программы C может быть включён из другого файла. Файл включения может даже содержать начало оператора, которое завершается в содержащем файле, или конец оператора, который начался в включающем файле. Однако, включенный файл должен состоять из полных токенов. Комментарии и строковые литералы, которые не были закрыты к концу включённого файла, недействительны. Для восстановления ошибок они считаются завершёнными в конце файла.
Для избежания путаницы, лучше, если файлы заголовков содержат только полные синтаксические единицы — объявления или определения функций, объявления типов и т. д.
Строка, следующая за директивой ‘#include’, всегда обрабатывается препроцессором C как отдельная строка, даже если включённый файл не содержит конечного символа новой строки.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/cpp/Include-Operation.html