Я думаю, что более обычным является соотношение один к одному между заголовочными файлами и исходными файлами. Таким образом, в другом проекте вы можете включить только часть кода, не включая объявления заголовков для множества функций, которые не имеют определений в проекте.
Итак, для каждого файла .c
имеется соответствующий файл .h
с тем же именем, который объявляет каждую функцию в файле .c
.
Вам нужно будет добавить так называемый guard в каждый заголовочный файл, чтобы убедиться, что он включен только один раз. Охранники выглядят так:
#ifndef GO_FUNCTIONS_GUARD
#define GO_FUNCTIONS_GUARD
.../* declarations go here
#endif
Что касается extern
, то в том, что вы описываете, нет необходимости. Просто придерживайтесь заголовочных файлов.