Должно ли определение встроенных функций C ++ находиться в одном файле? - PullRequest
15 голосов
/ 18 февраля 2012

Я определил функцию show() как встроенную в заголовочном файле с именем ex.h и в определении функции внутри ex.cpp.Я ожидал, что это даст мне ошибку, так как компилятор не будет знать, что заменить, где вызывается функция show().Но поскольку я использую IDE, все работало нормально.Как это могло произойти?

И, кстати, когда я пытался скомпилировать его вручную, он выдал ошибку, что show() используется, но не определен.

Ответы [ 3 ]

26 голосов
/ 18 февраля 2012

Обязательно, чтобы определение функции (часть между {...}) было помещено в заголовочный файл, если только функция не используется только в одном .cpp файле.
В частности, если вы поместите строкуОпределение функции в файл .cpp и вызов ее из какого-либо другого файла .cpp, вы получите ошибку "unresolved external" от компоновщика.

[читать дальше]

6 голосов
/ 18 февраля 2012

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

Некоторые компиляторы имеют функции для оптимизации всей программы сразу ( Оптимизация всей программы или Оптимизация времени соединения ).Эти компиляторы могут встроить функцию, даже если она определена в другом файле .cpp.

4 голосов
/ 18 февраля 2012

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

...