看了太多如何實現混合程式設計的總結,還是這個經典,來了,老弟。
要想寫一套c/c++均能呼叫的函式, 則必須按照c的方式編譯 (因為c語言不支援c++, 而c++同時支援c/c++)要實現c/c++混合程式設計其實很簡單, 只需要在標頭檔案加幾行**即可, 如下圖
c/c++混合程式設計核心**
有趣的是, objective-c的函式編譯命名規範與c語言一樣, 由此可知如果要實現c/oc/c++混合程式設計, 跟c/c++程式設計是大同小異.
上面都是非成員函式可以這樣使用,如果成員函式就比較複雜,可以看下面的搞法。
c中呼叫c++函式
將 c++ 函式宣告為``extern "c"''(在c++ **裡做這個宣告),然後呼叫它(在 c 或者 c++ **裡呼叫)。例如:
// c++ code:
extern "c" void f(int);
void f(int i)
然後,可以這樣使用 f():
/* c code: */
void f(int);
void cc(int i)
// c++ code:
class c
;
然後,就可以這樣呼叫 c::f():
/* c code: */
double call_c_f(struct c* p, int i);
void ccc(struct c* p, int i)
如果想在 c 裡呼叫過載函式,則必須提供不同名字的包裝,這樣才能被 c **呼叫。例如:
// c++ code:
void f(int);
void f(double);
extern "c" void f_i(int i)
extern "c" void f_d(double d)
然後,你可以這樣使用每個過載的 f():
/* c code: */
void f_i(int);
void f_d(double);
void cccc(int i,double d)
注意,這些技巧也適用於在 c 裡呼叫 c++ 類庫,即使你不能(或者不想)修改 c++ 標頭檔案。
而c++呼叫c,extern "c" 的作用是:讓c++聯結器找呼叫函式的符號時採用c的方式 如:
// c code
void foo( int x );
c++這樣呼叫c函式
// c++ code:
extern "c" void foo(int);
void f(int i)
就是讓c++聯結器能過類似於_foo來查詢此函式,而非類似於_foo_int這樣的符號。 C C 混合程式設計
c中呼叫c c 中呼叫c都會用到extern c 但兩者的意義卻大不一樣!例 c void foo int x c c code extern c void foo int x 讓c 聯結器能通過過類似於 foo來查詢此函式,而非類似於 foo int這樣的符號。使用extern c 則是告訴編譯器...
C C 混合程式設計
分類 linux c c 2012 12 26 09 51 655人閱讀收藏 舉報cc 混合程式設計 externc cplusplus 現在,我們就來慢慢的了解吧。一 extern c 的作用 最重點 1.extern c 的真實目的是實現類c和c 的混合程式設計。extern c 是由 提供的乙...
C C 混合程式設計
現在,我們就來慢慢的了解吧。一 extern c 的作用 最重點 1.extern c 的真實目的是實現類c和c 的混合程式設計。extern c 是由 提供的乙個連線交換指定符號,用於告訴 這段 是 函式。extern c 後面的函式不使用的c 的名字修飾,而是用c。這是因為c 編譯後庫中函式名會...