Преимущества / недостатки заголовочных файлов - PullRequest
5 голосов
/ 28 марта 2011

Каковы преимущества и недостатки использования заголовочных файлов на языке, подобном C или C ++, по сравнению с языком, подобным Java?Я думаю, что классы должны разрабатываться извне, поэтому хорошо иметь заголовочные файлы и не разбираться в деталях реализации.Однако, опять же, каждое объявление функции дублируется в двух файлах.Если бы C и C ++ были изобретены сегодня, использовали бы они заголовочные файлы?Этот механизм устарел или необходим?

Ответы [ 3 ]

13 голосов
/ 28 марта 2011

Взято из связанного поста в блоге Эрика Липперта, который очень хорошо это формулирует:

Я бы попросил эквивалент вопрос зачем С ++ нужен заголовок файлы ? Заголовочные файлы кажутся огромными потенциальная точка отказа; все раз я редактирую код C ++ и меняю подпись метода; если я забуду обновить заголовочный файл, затем код не компилируется и часто дает некоторые загадочное сообщение об ошибке. Надеюсь, это большая стоимость на самом деле покупает вас что-то.

Он покупает компилятору одну вещь, и пользователь одно.

Что покупает пользователь, так это то, что вы можете скомпилировать каждый отдельный файл "cpp" в файл «obj» независимо, при условии, что у вас есть все необходимые заголовки. Вся информация необходимо генерировать тела, которые находятся в данном файле cpp можно почерпнуть из набора заголовков. Это означает что система сборки может перекомпилировать только те файлы cpp, которые изменились, при условии, что заголовок не изменился.

Что покупает компилятор что каждый файл может быть скомпилирован в «Один проход». Потому что каждый тип и метод объявление обрабатывается раньше его первое использование , компилятор может просто начните с начала файла, вытяните все включенные заголовки и исходить сверху вниз, плеваться из файла obj как он есть, никогда необходимость вернуться и вернуться что-то уже видел.

В отличие от таких языков, как C # (о котором говорится в блоге) и Java, довольно близкий родственник.

1 голос
/ 28 марта 2011

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

0 голосов
/ 28 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...