Заголовочные файлы являются неотъемлемой частью языка. Без заголовочных файлов все статические библиотеки, динамические библиотеки, практически все предварительно скомпилированные библиотеки становятся бесполезными. Заголовочные файлы также упрощают документирование всего и позволяют просматривать API библиотеки / файла, не просматривая каждый бит кода.
Они также упрощают организацию вашей программы. Да, вы должны постоянно переключаться с источника на заголовок, но они также позволяют вам определять внутренние и частные API внутри реализаций. Например:
MySource.h:
extern int my_library_entry_point(int api_to_use, ...);
MySource.c:
int private_function_that_CANNOT_be_public();
int my_library_entry_point(int api_to_use, ...){
// [...] Do stuff
}
int private_function_that_CANNOT_be_public() {
}
Если вы #include <MySource.h>
, тогда вы получите my_library_entry_point
.
Если вы #include <MySource.c>
, то вы также получите private_function_that_CANNOT_be_public
.
Вы видите, как это могло бы быть очень плохо, если бы у вас была функция для получения списка паролей, или функция, которая реализовала ваш алгоритм шифрования, или функция, которая открывала бы внутреннюю часть ОС, или функция, превышение привилегий и т. д.