c 呼叫c和c呼叫c

2021-07-22 08:39:26 字數 1844 閱讀 1901

c++的設計是相容c的,但是呼叫的時候還是需要遵循規則

1 包含標頭檔案

extern "c"
2 宣告呼叫的函式

extern 「c」

為什麼要加extern 「c」?

1 c++語言支援函式過載,c語言不支援函式過載。

2 函式被c++編譯後在庫中的名字與c語言的不同。

void add(int x, int y);

該函式被c 編譯器編譯後在庫中的名字為_ add,而c++編譯器則會產生像

_add_int_int之類的名字用來支援函式過載和型別安全連線。

為什麼extern 「c」有效呢

c++編譯器已經對c標準庫的標頭檔案作了extern「c」處理,所以我們可以用#include 直接引用這些標頭檔案
其實可以做下**優化

具體**

//

// main.cpp

// cpp_call_c

//// created by bikang on 16/9/2.

//#include using namespace std;

extern "c"

extern "c"

/*int add(int x,int y)

*/double add(double x,double y)

//過載

int max(int a,int b)

double max(double a,double b)

int main(int argc, const char * argv)

咱們改進下**,一般的c專案都會這麼幹

//

// main.cpp

// cpp_call_c

//// created by bikang on 16/9/2.

//#ifndef __cplusplus

#define __cplusplus 1

#endif

#include using namespace std;

/*extern "c"

extern "c"

*//*

int add(int x,int y)

*/double add(double x,double y)

//過載

int max(int a,int b)

double max(double a,double b)

int main(int argc, const char * argv)

執行 g++ -fpic -shared -o libtesthi.so hi.cpp

然後 cp libtesthi.so /lib/

#include void hi();

#ifdef __cplusplus

extern "c"

#ifdef __cplusplus

}#endif

執行 g++ -fpic -shared -o libtestinte***ce.so inte***ce.cpp -ltesthi

然後 cp libtestinte***ce.so /lib/

接著 ldconfig下

**#include int main()

//執行 gcc t.c -ltestinte***ce -o t

//執行 ./t 即可檢視結果

c中呼叫c++參考部落格1

c中呼叫c++參考部落格2

c中呼叫c++參考部落格3

C和C 混編,c呼叫C ,c 呼叫C

這兩天一直在解決這樣的乙個問題,專案之中有如下的需求 嵌入式的產品,演算法部分用c 實現,而控制程式和其它程式用c實現.這就要求可以通過c來呼叫c 的演算法程式.同時,這個專案有乙個pc的demo程式,是用vc開發的,這又要求c 能呼叫c的主控程式.一直知道應該用extern,但是具體該如何使用,一...

c 呼叫lua,lua呼叫c

建立工程 引用lua的動態庫和工程專案的配置資訊 結合 main.lua指令碼檔案 print lua呼叫c lua呼叫c 結合部分 c 向lua堆疊寫東西 通過lua堆疊 lua通過lua全域性標量獲取返回lua堆疊再到c lua傳遞數字給c cgivelua wangcheng 22,1 lua...

C 呼叫 C dll,同時c 呼叫c

筆者解決這兩個問題,花了很長一段時間,網上提供能正常執行的沒有找到,不過一邊東拼西湊,一邊靠朦還是解決了。先貼上 dllimport c users administrator.sc 201901090132 desktop opengl dll3 release dll3 dll3.dll ent...