Какова точка файлов заголовков в C?

Возможные дубликаты:
[C] Заголовок для исходного файла.
В C ++ почему есть файлы заголовков и файлы cpp?
C ++ – Что должно зайти в файл .h?

Единственная причина, по которой файлы заголовков существуют в C, – это то, что разработчик может быстро увидеть, какие функции доступны, и какие аргументы они могут принять? Или это как-то связано с компилятором?

Почему другой метод не использовал этот метод? Это только я, или кажется, что наличие двух наборов определений функций приведет к большему количеству обслуживания и большему количеству ошибок? Или знает о файлах заголовков только то, что должен знать каждый разработчик C?

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

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

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

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

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

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

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

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

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

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

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

  • Верно ли, что нет необходимости изучать C, потому что C ++ содержит все?
  • Функции обратного вызова в c ++
  • Не удалось скопировать файл. Доступ к пути запрещен.
  • Как читать одно значение ячейки Excel
  • Когда я изменяю параметр внутри функции, он тоже изменяется для вызывающего?
  • В чем разница между const_iterator и non-const iterator в C ++ STL?
  • Одиночная пиксельная линия OpenGL
  • Сделать ListView.ScrollIntoView Прокручивать элемент в центр ListView (C #)
  • Получить все элементы управления определенного типа
  • Почему C ++ запрещает анонимные структуры?
  • Почему в стандартных библиотеках C ++ нет int pow (int base, int exponent)?
  • Давайте будем гением компьютера.