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...