Да, это правильно, но только частично. Может быть правильно оформлено следующим образом:
"Встроенные функции должны быть определены в каждой единице перевода (но не обязательно до), в которой они вызываются."
C11 ++ Стандарт: §7.1.2.4
Встроенная функция должна быть определена в каждой единице перевода, в которой она используется, и должна
имеют в каждом случае одно и то же определение. [Примечание: вызов встроенной функции может встретиться до того, как ее определение появится в блоке перевода. —Конечная записка]
Почему это обоснование?
Когда вы в основном объявляете функцию встроенной, вы говорите компилятору (если это возможно) заменить код для вызова функции на содержимое функции, где бы эта функция ни вызывалась. Идея состоит в том, что тело функции, вероятно, является небольшим, и вызов функции требует больше ресурсов, чем тело самой функции.
Чтобы сделать это, компилятору нужно видеть определение при компиляции кода, где вызывается функция. Обычно это делается путем добавления определения функции в заголовок со спецификатором inline
и последующего включения файла заголовка в каждый файл cpp, где должна вызываться функция.