2015-05-23 2 views
-1

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

+3

Возможный дубликат [Включить исходный код в файл заголовка?] (Http://stackoverflow.com/questions/4588727/should-you-include-source-code-in-a-header-file) –

+0

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

+0

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

ответ

1

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

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

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

1

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

Смежные вопросы