#include
- это этап предварительной обработки, так что вы можете вставить туда что угодно.Это в основном вопрос стиля, но это хорошая практика программирования, чтобы минимизировать влияние на пространство имен.(Обычно) использование файлов заголовков позволяет примитивное различие между public и private , при этом public определения помещаются в заголовок.Таким образом, отдельный модуль компиляции может включать заголовок и разрешать определения, когда их связывают.Все, что является приватным для модуля компиляции, не должно быть включено, если только объявление public не имеет его как свою зависимость.Некоторые вещи, которые полезно (или необходимо) поместить в заголовочные файлы,
typedef
, которые используются в открытых функциях (например, указатель нафункция, используемая в качестве аргумента для не static
функции, которая также является частью заголовка); enum
значения, которые используются в public функциях или являются частью .h
назначение файла; struct
или union
объявлений, особенно если они находятся в открытых функциях.Нет необходимости определять их, если все функции используют значения указателя (скрытие данных - хороший дизайн, см. В чем разница между определением и объявлением? ); #define
в заголовочных файлах следует использовать экономно, чтобы избежать конфликтов пространства имен, но иногда это является частью цели заголовка; - любые частные символы должны быть
static
, таким образом, допускается дополнительная оптимизация;ничего static
не должно быть там, и main
не нуждается в прототипе (см. Объявите основной прототип ); extern
см. C: Что такоеиспользовать 'extern' в заголовочных файлах? .
Файл c
обычно должен #include
, это h
файл.Также есть несколько других применений заголовочных файлов;например, см. https://en.wikipedia.org/wiki/X_Macro.