C C 實現混合程式設計,很簡單

2021-09-08 17:06:17 字數 1602 閱讀 7566

看了太多如何實現混合程式設計的總結,還是這個經典,來了,老弟。

要想寫一套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 編譯後庫中函式名會...