Какова точка заголовочных файлов в C? [дубликат]

20
задан Community 23 May 2017 в 12:09
поделиться

4 ответа

Файлы заголовка необходимы для DECLARE функций и доступных переменных. Возможно, вы не имеете доступа к определениям (= файлы .c) вообще ; C поддерживает бинарное распространение кода в библиотеках.

27
ответ дан 29 November 2019 в 23:20
поделиться

Существуют главные причины для обмена объявлениями между несколькими исходными файлами.

Скажем, у вас есть функция float * f (int a, int b) , определено в файле AC и повторно используется в BC и DC . Чтобы позволить компилятору правильно проверить аргументы и возвращает значения, которые вы либо помещаете функциональный прототип в заголовочном файле и включите его в исходные файлы .C , либо повторяете прототип в каждом исходном файле.

То же самое касается Typedef и т. Д.

, когда вы можете, по теории, повторите ту же декларацию в каждом исходном файле, это станет настоящим кошмаром, чтобы правильно управлять им.

Некоторый язык использует тот же подход. Я помню турбопаскальские единицы, не совсем разные. Вы бы поставили ... в начале, чтобы сигнализировать, что вам потребуют функции, которые были определены в другом месте. Я не могу вспомнить, также было передано в Delphi.

9
ответ дан 29 November 2019 в 23:20
поделиться
  1. знать, что в библиотеке в вашем распоряжении.
  2. Разделите программу в кусочки размера укуса для компилятора. Компиляция мегабайта C файлов C одновременно займет больше ресурсов, чем может предложить большинство современных аппаратных средств.
  3. Уменьшить нагрузку компилятора. Почему он должен знать в процедурах отображения экрана о двигателе глубоких баз данных? Пусть он изучит только функции, которые он нуждается сейчас.
  4. Отдельные частные и публичные данные. Это использование не часто, но вы можете реализовать в C, в чем C ++ использует частные поля для: каждый файл .C включает в себя два файла .h, один с объявлениями частных вещей, другой с тем, что другие могут потребоваться от файла. Менее шансов на конфликт пространства имен, безопаснее из-за герметизации.
  5. Альтернативные конфиги. Makefile решает, какой заголовок использовать, и тот же код может обслуживать два разных платформа, заданные два разных файла заголовка.

, вероятно, больше.

2
ответ дан 29 November 2019 в 23:20
поделиться

Компилятор нуждается в информации в файлах заголовков, чтобы узнать, какие функции, структуры и т. Д. Доступны и как их использовать.

Все языки нуждаются в такой информации, хотя они извлекают информацию по-разному. Например, компилятор Java делает это путем сканирования классов или исходный код Java для получения информации.

Недостаток с Java-Way состоит в том, что компилятор потенциально должен иметь гораздо больше информации в своей памяти, чтобы иметь возможность сделать это. Это не имеет большого значения сегодня, но в семидесятых, когда был создан язык C, было просто невозможно сохранить эту большую информацию в памяти.

11
ответ дан 29 November 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: