Зачем C ++ нужен отдельный заголовочный файл? - PullRequest
113 голосов
/ 20 августа 2009

Я никогда не понимал, почему C ++ нуждается в отдельном заголовочном файле с теми же функциями, что и в файле .cpp. Это делает создание классов и их рефакторинг очень сложным и добавляет ненужные файлы в проект. И затем возникает проблема с необходимостью включения заголовочных файлов, но с явной проверкой, если они уже были включены.

C ++ был ратифицирован в 1998 году, так почему же он разработан таким образом? Какие преимущества имеет наличие отдельного заголовочного файла?


Контрольный вопрос:

Как компилятор находит файл .cpp с кодом в нем, когда я включаю только файл .h? Предполагается ли, что файл .cpp имеет то же имя, что и файл .h, или он просматривает все файлы в дереве каталогов?

Ответы [ 13 ]

1 голос
/ 20 августа 2009

Ну, вы можете прекрасно разработать C ++ без заголовочных файлов. Фактически некоторые библиотеки, которые интенсивно используют шаблоны, не используют парадигму заголовочных файлов / файлов кода (см. Boost). Но в C / C ++ нельзя использовать то, что не объявлено. Один практический способ иметь дело с тем, чтобы использовать заголовочные файлы. Кроме того, вы получаете преимущество совместного использования интерфейса без совместного использования кода / реализации. И я думаю, что создатели C не предполагали этого: когда вы используете общие заголовочные файлы, вы должны использовать знаменитое:

#ifndef MY_HEADER_SWEET_GUARDIAN
#define MY_HEADER_SWEET_GUARDIAN

// [...]
// my header
// [...]

#endif // MY_HEADER_SWEET_GUARDIAN

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

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

Еще одно бремя для нас, бедных пользователей C ++ ...

1 голос
/ 20 августа 2009

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

1 голос
/ 20 августа 2009

C ++ был ратифицирован в 1998 году, так почему же он разработан таким образом? Какие преимущества имеет отдельный заголовочный файл?

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

...