[英]C inline function used from C++ code
我試圖從C ++代碼調用用C定義的內聯函數,但出現未解決的符號錯誤。 我什至可以這樣做嗎?
在def.h中:
#ifdef __cplusplus
extern "C" {
#endif
#include "types.h"
extern inline void foo();
#ifdef __cplusplus
}
#endif /* extern "C" */
在def.c中:
inline void foo()
{
some code
}
在C ++代碼中的其他地方:
void bar()
{
foo();
}
這是我得到未解決的符號錯誤的地方。 有沒有辦法進行編譯? 如果是這樣,它將如何運作? 編譯器會用C定義替換C ++代碼中的函數調用嗎? 消除功能調用非常重要,因為這對於嵌入式環境而言。
謝謝。
大多數編譯器會在源文件級別生成代碼。 要生成代碼,編譯器必須“查看”生成代碼所需的所有函數的源代碼。 除非您具有LTO / LTGC,否則必須在所有調用它們的文件中提供所有inline
函數的源。
嘗試將內聯函數的源移動到相應的標頭中:
def.h:
#ifdef __cplusplus
extern "C" {
#endif
#include "types.h"
inline void foo()
{
some code
}
#ifdef __cplusplus
}
#endif /* extern "C" */
def.c:
從該文件中刪除foo()
定義(或刪除該文件)。
在C ++代碼中的其他地方:
#include "def.h"
void bar()
{
foo();
}
內聯C函數的定義應進入C ++代碼可見並包含的標頭中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.