C和C 如何相互呼叫

2021-09-18 00:22:01 字數 1190 閱讀 9824

為什麼不能直接呼叫:

在編譯的時候c和c++生成符號的規則不同,所以直接呼叫會出現符號未定義的鏈結錯誤。

示例1:下面演示相互呼叫介面錯誤示例:

// test.c

int sum(int a, int b)

// main.cpp

int sum(int a, int b); //在本檔案中宣告一下

int main()

錯誤 1 error lnk2019: 無法解析的外部符號 "int __cdecl sum(int,int)" (?sum@@yahhh@z),該符號在函式 _main 中被引用

錯誤 2 error lnk1120: 1 個無法解析的外部命令

示例2:c++呼叫c的介面正確呼叫

還是上面的**,在main.cpp中加上extern 「c」:

原理:告訴c++編譯器,裡面的符號規則按照c的規則生成

c++編譯器既能產生c符號,也能產生c++的符號

c編譯器只能產生c符號

extern "c"

int main()

執行結果:

20extern "c"是c++中的語法,c中自然不能用了....,況且c語言只能產生一種符號

示例3:c語言正確呼叫c++的介面

依然是extern 「c」,且一定用在cpp中

// test.c

int sum(int a, int b);//宣告

int main()

// main.cpp

extern "c"

}//這裡是將cpp中的函式定義放在其中,告訴編譯器按照c語言生成符號的規則產生函式符號

//將所有c++原始碼闊在括號裡面

//c語言最難呼叫的是被封裝起來的c++源**。

擴充套件:

#ifdef  _cplusplus    //c++編譯器內建巨集

extern "c"

#endif

//這段巨集表示,不論是c++還是c**,都可以生成c的符號

C和C 相互呼叫

c和c 相互呼叫 2011 11 01 18 42 29 分類 c c 在專案中融合c和c 有時是不可避免的,在呼叫對方的功能函式的時候,或許會出現這樣那樣的問題。近來在主程式是c語言,而呼叫c 功能函式的時候,c 的 h標頭檔案都能找到,功能函式也都定義了,最重要的是,單獨編譯c 的時候完全沒有問...

C 和C的相互呼叫

在c專案中融合c 和c的 是實際工程中不可避免的,就如一般底層的驅動是用c寫的,而應用層一般會用c c 的編譯器能相容c語言的編譯器,但他優先以c 的方式編譯 extern關鍵字強制讓c 編譯器對 進行c方式編譯注意 cplusplus 是c 編譯器都內建的乙個巨集,可以用來判斷是不是c 編譯器,那...

C 和C的相互呼叫

在實際的工程中,c 和c的相互呼叫時不可避免的。但是有時候用c語言的編譯器編譯成的軟體包,在c 的程式中呼叫會出現錯誤。先看一下乙個例子 add.c include add.h int add int a,int b add.h int add int a,int b 將這兩個檔案用c語言編譯器編譯...