В случае заголовочных файлов это просто соглашение.
Вы также можете включить другой код, старый шаблон которого был:
file.inc:
MACRO("-a", "--append", "this will append text"),
MACRO("-b", "--bottom", "something for bottom"),
и в основном файле:
char *options[] = {
#define MACRO(short, long, help) (short)
#include "file.inc"
#undef MACRO
NULL
};
char *help[] = {
#define MACRO(short, long, help) (help)
#include "file.inc"
#undef MACRO
NULL
};
и подобные конструкции.Сейчас это не так часто.Я думаю, что в книге 20 век C еще есть некоторые из таких приемов, но лично я предпочел бы внешний препроцессор.
Ядро Linux иногда включает в себя другие * .c файлы,например, изменение нескольких функций с помощью макроса.Я не думаю, что обычно это хороший стиль кодирования, но ядро использует его для сборки, например, для драйверов, которые совместно используют 99,9% кода.
Примечание: #include <include.h>
отличается.В этом случае include.h
может быть интерпретирован как метка для компилятора (который может использовать его как флаг).В системе нет необходимости иметь заголовки стандартных библиотек, но современные распространенные компиляторы имеют заголовки также для стандартных библиотек.
Файл h может быть пустым или содержать окончательный перевод строки \n
.Других требований нет.Для контекста это должно быть допустимым C.
Исторически существовали препроцессор cpp
и компилятор cc
как две разные программы.Таким образом, препроцессор ничего не знает о соглашении и структуре имени файла.Компилятор, чем компилировать все остальное, просто как один файл.См. Выше о возможном исключении для стандартных библиотек.Примечание: я видел также использование препроцессора C в сценариях оболочки, но не в файлах C.(gcc -E
Последний пункт. Некоторые компиляторы, например, gcc, используют расширение файла для выбора используемого языка. Вы можете перезаписать его с помощью параметров командной строки. Но так, gcc a.h
не может скомпилировать файлтак, как вы ожидаете. Например, в моей системе touch a.h b.c; gcc a.h; gcc b.c
дает два разных результата.