Они должны быть в файлах .h
. Другой вариант - файл .c
, и для этого потребуется использовать #include
для включения файла .c
, что очень определенно запутает людей, а также запутает ваш make-файл, если он использует стандартное предположение, что каждый * Файл 1005 * будет напрямую соответствовать скомпилированному файлу .o
.
Обычный шаблон таков: .h
файлы предназначены для вещей, которые включены в другие места (и, в частности, во многих других местах), и что .c
файлы предназначены для вещей, которые однажды скомпилированы в объектные файлы.
Таким образом, в файлы .h
обычно входят следующие вещи:
- Функциональные прототипы
- декларации констант
- Глобальная переменная
extern
объявления
- Определения встроенных функций
- Определения типов
- и определения макросов, например, о чем вы спрашиваете.
И наоборот, в файлы .c
обычно входят следующие вещи:
- Определения глобальных переменных
- Определения функций, которые будут скомпилированы в объектный код и связаны
Случай «определения функций входят только в .c
файлы» - это просто вырожденный случай, когда у вас нет встроенных функций.
В C ++, где множество функций определены в шаблонной форме и, следовательно, определения должны включаться всякий раз, когда они используются, эти определения очень часто помещаются в файл .h
(или .hpp
, или любой другой). Так что подобные вещи, безусловно, имеют прецедент.