簡體   English   中英

從C ++代碼使用的C內聯函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM