Я пытаюсь определить функцию в файле CPP, который будет объявлен в заголовочном файле. Я хотел бы знать правильный способ сделать это, поскольку все, что я пробовал, компилируется и запускается, и мои навыки анализа не достаточно хороши, чтобы исследовать, действительно ли функции встроены.
Вот что я хотел бы сделать
/// Source.h
void inlined_func(); // what specifiers should I put here?
// I was thinking about doing both `extern` and `__forceinline`/// Source.cpp
__forceinline void inlined_func()
{
std::cout << "we're in the inlined func" << std::endl;
}
Функция объявлена как __forceinline
по умолчанию получает внутреннюю связь (имя может упоминаться только в текущей единице перевода), как если бы она была объявлена как static
, Если вы попытаетесь использовать его в другом модуле перевода, вы получите ошибку компоновщика LNK2001 unresolved external symbol ...
, Чтобы принудительно установить внешнюю связь, чтобы на нее можно было ссылаться в других единицах перевода, используйте extern
ключевое слово.
foo.h
void foo();
foo.cpp
#include <foo.h>
extern __forceinline void foo() {
/*...*/
}
main.cpp
#include <foo.h>
int main() {
foo();
}
Других решений пока нет …