C C 混合程式設計

2021-05-27 08:42:47 字數 2313 閱讀 3681

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