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++語法還是按c++方式編譯。使用extern "c"則是告訴編譯器依照c的方式來編譯封裝介面,當然介面函式裡面的c++語法還是按c++方式編譯。
再來說說c中呼叫c++,這其中也會用到extern "c",這則是告訴編譯器依照c的方式來編譯封裝介面,當然介面函式裡面的c++語法還是按c++方式編譯。
c++**:(非成員函式)
extern "c" int foo( int x );
int foo( int x )
這樣,編譯器會將foo函式編譯成類似_foo符號,而不會編譯成類似_foo_int符號。
c**
int foo( int x );
void cc( int x )
// 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++的過程:
// cpp.h
#ifndef __cpp_h__
#define __cpp_h__
class class1 ;
#endif
// end file
// cpp.cpp
#i nclude "stdafx.h"
#i nclude #i nclude "cpp.h"
#i nclude "c.h"
using namespace std; // 開啟標準庫名字空間
class1::class1()
{}class1::~class1()
{}int class1::geti(void)
// 按 c 呼叫方式編譯下面函式
extern "c"
int get_class1_i(struct1 * p)
// end file
// c.h
#ifndef __c_h__
#define __c_h__
#ifdef __cplusplus
extern "c" struct1;
#ifdef __cplusplus
}#endif
#endif
// end file
// c.c
#i nclude #i nclude "c.h"
extern int get_class1_i(void * p);
struct1 s;
int main(void)
// end file
在linux下,執行:
gcc -c c.c
g++ -c cpp.cpp
gcc -lstdc++ c.o cpp.o -o result
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 編譯後庫中函式名會...
C C 混合程式設計
首先,混合程式設計不是指在同乙個檔案裡寫c 與c 混合程式設計包括 1 c 引用c 的標頭檔案 2,g 生成的.o與 gcc生成的 o相鏈結。1.extern c 的真實目的是實現類c和 c 的混合程式設計。extern c 是由 提供的乙個連線交換指定符號,用於告訴 這段 是 函式。extern ...