C C 混合程式設計

2021-08-22 13:38:47 字數 2427 閱讀 4877

1.c++的編譯和連線

函式同名不同參,在 c++ 是合法的

void foo(int i);

void foo(char c);

void foo(float f);

void foo(char* s);

c++ 在編譯時,以上函式將被編譯為類似下列符號

_foo_int

_foo_char

_foo_float

_foo_string

鏈結時也會去尋找是否有這樣的符號

2.c的編譯和鏈結

c 在編譯時函式符號不會帶上引數型別,因此以上列出函式都被編譯為_foo

#include 

void foo(int i);

void foo(char i);

int main(int argc, char

const *argv)

c 編譯器當發現第二個同名函式宣告時,若型別不相同,則會觸發型別衝突錯誤。

3.extern 「c」

在c/c++混合專案中會看到下面的**

#ifdef __cplusplus

extern "c"

#endif

extern : 宣告編譯器遇到此變數和函式時在其他模組中尋找其定義

「c」: 表示一種符合 c 語言編譯和連線的規則

因此當 c++ 編譯器遇到被 extern 「c」 修飾的**時,將按照 c 語言方式編譯和鏈結。c 不支援 「c」,這裡 c++ 使用 」 __cplusplus 」 編譯開關選擇。

4.c 呼叫 c++ **

cpp_fun.h

/* c++ 標頭檔案 */

#ifndef cpp_fun_h

#define cpp_fun_h

class

math

;#endif /* cpp_fun_h */

cpp_fun.cpp

/* c++ 現實庫 */

#include "cpp_fun.h"

int math::add(int a, int b)

mid.h

/* c++ 中間標頭檔案 */

#ifndef mid_h

#define mid_h

#ifdef __cplusplus

extern "c"

#endif

#endif /* mid_h */

mid.cpp

/* c++ 中間介面庫,封裝類方法 */

#include "mid.h"

#include "cpp_fun.h"

int add_cpp(int a, int b)

main.c

/* c 原始碼呼叫 c++ 方法 */

#include "stdio.h"

#include "mid.h"

int main()

makefile

all:

g++ -c cpp_fun.cpp cpp_fun.h

g++ -c mid.cpp mid.h cpp_fun.h

gcc -c main.c mid.h

- rm *.o *.gch

5.c++ 呼叫 c **

c.h

/* c 標頭檔案 */

#ifndef c_h

#define c_h

#ifdef __cplusplus

extern "c"

#endif

#endif /* c_h */

c_fun.c

/* c 原始碼庫 */

#include

#include "c.h"

void c_fun(int i)

main.cpp

/* c++ 原始碼呼叫 c 函式 */

#include "c.h"

int main(int argc,char** argv)

makefile

all:

gcc -c c_fun.c c.h

g++ -c main.cpp c.h

- rm *.o *.gch

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 編譯後庫中函式名會...