簡體   English   中英

從 C 訪問內聯 C++ function

[英]Access inline C++ function from C

我正在嘗試為 C++ 創建 C 函數包裝器,我的目標是使它們內聯。 inte.net 上的所有解決方案都說,在庫中制作內聯 function 時,只需將 function 定義放入 header 文件中即可。 但這在這種情況下不起作用,因為函數包含的代碼只能在 C++ 中編譯。

這個例子演示了這種情況:

// box_c.cpp
#include "box.h"

extern "C" Square *new_Square(int width, int height){
    return new Square(width, height);
}



// box_c.h
void *new_Square(int width, int height);



// main.c
#include "box_c.h"

int main(void){
    void *s = new_Square(5, 5);
}


在這種情況下是否可以使new_Square內聯? (包裝器是一個 static 庫)。

內聯意味着內聯源代碼的編譯器需要在某種程度上理解它。 C 編譯器不理解 C++ new . 你不能這樣做。 讓它保持非內聯,這樣就可以鏈接代碼的編譯版本,而無需編譯器本身理解 C++。

如果代碼(庫和最終可執行文件)是在啟用 LTO 的情況下編譯的,則 linker 可能會在此時內聯代碼,但並不能保證。

顯然,通常你不能在 C 代碼中內聯 C++ 代碼,它們是兩種不同的語言。

所以,要么

  • 在編譯庫中強制顯式實例化 C++ function,

  • 確保 C++ function 與 C 代碼兼容,並將其作為內聯保留在 header 文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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