Какова точка файлов заголовков в C?
Возможные дубликаты:
[C] Заголовок для исходного файла.
В C ++ почему есть файлы заголовков и файлы cpp?
C ++ – Что должно зайти в файл .h?
Единственная причина, по которой файлы заголовков существуют в C, – это то, что разработчик может быстро увидеть, какие функции доступны, и какие аргументы они могут принять? Или это как-то связано с компилятором?
Почему другой метод не использовал этот метод? Это только я, или кажется, что наличие двух наборов определений функций приведет к большему количеству обслуживания и большему количеству ошибок? Или знает о файлах заголовков только то, что должен знать каждый разработчик C?
- Место для размещения Database.SetInitializer
- Какие, если есть, компиляторы C ++ выполняют оптимизацию хвостовой рекурсии?
- Как удалить выбранный DataGridViewRow и обновить связанную таблицу базы данных?
- Неравномерные указатели на x86
- Почему передача char ** как const char ** генерирует предупреждение?
- Первоначальное понимание атрибута ForeignKey в коде структуры сущности
- Linq to EntityFramework DateTime
- Почему scanf должен принимать адрес оператора
- Join / Where with LINQ и Lambda
- C ++ вызывает явный конструктор шаблонов
- Перегрузка оператора в C
- Как вызвать файл VBScript в приложении C #?
- Objective-C: чтение строки по строке
Файлы заголовков необходимы для объявления доступных функций и переменных. Возможно, вы вообще не имеете доступа к определениям (= .c files); C поддерживает только двоичное распространение кода в библиотеках.
Компилятору нужна информация в файлах заголовков, чтобы узнать, какие функции, структуры и т. Д. Доступны и как их использовать.
Все языки нуждаются в такой информации, хотя они извлекают информацию по-разному. Например, компилятор Java делает это, сканируя либо файл classа, либо исходный код java для извлечения информации.
Недостатком Java-пути является то, что компилятор потенциально должен хранить в своей памяти гораздо больше информации, чтобы иметь возможность сделать это. Сегодня это не имеет большого значения, но в семидесятые годы, когда был создан язык C, просто было невозможно сохранить такую информацию в памяти.
Основные заголовки причин существуют, чтобы делиться объявлениями из нескольких исходных файлов.
Скажем, у вас есть функция float *f(int a, int b)
определенная в файле ac
и повторно используемая в bc
и dc
. Чтобы позволить компилятору правильно проверять аргументы и возвращать значения, вы либо помещаете прототип функции в заголовочный файл, и включаете его в исходные файлы .c
либо повторяете прототип в каждом исходном файле.
То же самое касается typedef
и т. Д.
Хотя теоретически можно повторить одну и ту же декларацию в каждом исходном файле, это станет настоящим кошмаром для правильного управления им.
На одном языке используется тот же подход. Я помню, что единицы TurboPascal не очень разные. Вы бы use ...
в начале, чтобы сигнализировать, что вам потребуются функции, которые были определены в другом месте. Я не помню, как это было передано в Delphi.
- Знайте, что находится в библиотеке в вашем распоряжении.
- Разделите программу на куски размером с укусом для компилятора. Компиляция мегабайта файлов C одновременно потребует больше ресурсов, чем может предложить большинство современных аппаратных средств.
- Уменьшите нагрузку на компилятор. Почему он должен знать в процедурах отображения экрана о глубоком движке базы данных? Пусть он узнает только о функциях, которые ему нужны сейчас.
- Отдельные частные и общедоступные данные. Это использование не часто, но вы можете реализовать в C то, что C ++ использует частные поля для: каждый .c файл содержит два файла .h, один с объявлениями частных вещей, а другой – с любыми другими, которые могут потребоваться из файла. Меньше шансов на конфликт пространства имен, более безопасный из-за герметизации.
- Альтернативные конфигурации. Makefile решает, какой заголовок использовать, и тот же код может обслуживать две разные платформы, учитывая два разных файла заголовка.
вероятно, больше.