Файлы заголовка необходимы для DECLARE функций и доступных переменных. Возможно, вы не имеете доступа к определениям (= файлы .c) вообще ; C поддерживает бинарное распространение кода в библиотеках.
Существуют главные причины для обмена объявлениями между несколькими исходными файлами.
Скажем, у вас есть функция float * f (int a, int b)
, определено в файле AC
и повторно используется в BC
и DC
. Чтобы позволить компилятору правильно проверить аргументы и возвращает значения, которые вы либо помещаете функциональный прототип в заголовочном файле и включите его в исходные файлы .C
, либо повторяете прототип в каждом исходном файле.
То же самое касается Typedef
и т. Д.
, когда вы можете, по теории, повторите ту же декларацию в каждом исходном файле, это станет настоящим кошмаром, чтобы правильно управлять им.
Некоторый язык использует тот же подход. Я помню турбопаскальские единицы, не совсем разные. Вы бы поставили ...
в начале, чтобы сигнализировать, что вам потребуют функции, которые были определены в другом месте. Я не могу вспомнить, также было передано в Delphi.
, вероятно, больше.
Компилятор нуждается в информации в файлах заголовков, чтобы узнать, какие функции, структуры и т. Д. Доступны и как их использовать.
Все языки нуждаются в такой информации, хотя они извлекают информацию по-разному. Например, компилятор Java делает это путем сканирования классов или исходный код Java для получения информации.
Недостаток с Java-Way состоит в том, что компилятор потенциально должен иметь гораздо больше информации в своей памяти, чтобы иметь возможность сделать это. Это не имеет большого значения сегодня, но в семидесятых, когда был создан язык C, было просто невозможно сохранить эту большую информацию в памяти.