Ответ 1
Заголовочные файлы необходимы для объявления доступных функций и переменных. Возможно, вы вообще не имеете доступа к определениям (=.c files); C поддерживает только двоичное распределение кода в библиотеках.
Возможные дубликаты:
[C] Заголовок для исходного файла.
В С++ для чего нужны файлы заголовков и файлы cpp?
С++ - Что должно зайти в файл .h?
Является ли единственная причина, по которой файлы заголовков существуют на C, поэтому разработчик может быстро увидеть, какие функции доступны, и какие аргументы они могут принять? Или это как-то связано с компилятором?
Почему другой метод не используется? Это только я, или кажется, что наличие двух наборов определений функций приведет к большему количеству обслуживания и большему количеству ошибок? Или знает о файлах заголовков только то, что должен знать каждый разработчик C?
Заголовочные файлы необходимы для объявления доступных функций и переменных. Возможно, вы вообще не имеете доступа к определениям (=.c files); C поддерживает только двоичное распределение кода в библиотеках.
Компилятору нужна информация в файлах заголовков, чтобы узнать, какие функции, структуры и т.д. доступны и как их использовать.
Все языки нуждаются в такой информации, хотя они извлекают информацию по-разному. Например, компилятор Java делает это, просматривая либо файл класса, либо исходный код java для извлечения информации.
Недостатком Java-способа является то, что компилятор потенциально должен хранить в своей памяти гораздо больше информации, чтобы иметь возможность сделать это. Сегодня это не имеет большого значения, но в семидесятые годы, когда был создан язык C, просто было невозможно сохранить эту информацию в памяти.
Основная причина, по которой существуют заголовки, заключается в совместном использовании объявлений между несколькими исходными файлами.
Скажите, что у вас есть функция float *f(int a, int b)
, определенная в файле a.c
и повторно используемая в b.c
и d.c
. Чтобы позволить компилятору правильно проверять аргументы и возвращать значения, вы помещаете прототип функции в файл заголовка и включаете его в исходные файлы .c
или повторяете прототип в каждом исходном файле.
То же самое касается typedef
и т.д.
Хотя теоретически можно повторить одно и то же объявление в каждом исходном файле, это станет настоящим кошмаром для правильного управления им.
В некотором языке используется тот же подход. Я помню, что единицы TurboPascal не очень разные. Сначала вы ставили бы use ...
, чтобы сообщить, что вам потребуются функции, которые были определены в другом месте. Я не могу вспомнить, было ли это передано в Delphi.
возможно больше.