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