C ++ внешне определяет встроенную функцию - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь определить функцию в файле 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;
}

1 Ответ

0 голосов
/ 01 сентября 2018

Функция, объявленная как __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();
}
...