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-10.5.0/cpp/Include-Operation.html