第五天2017/04/06(下午1:C、C++混合编程 与 #ifdef __cplusplus extern C{ })
生活随笔
收集整理的這篇文章主要介紹了
第五天2017/04/06(下午1:C、C++混合编程 与 #ifdef __cplusplus extern C{ })
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C++、C編譯器對函數編譯的相關知識:C++支持函數重載,而C不支持,兩者的編譯規則也不一樣。函數被C++編譯后在符號庫中的名字與C語言的不同。例如,假設某個函數的原型為: void foo( int x, int y ); 該函數被C編譯器編譯后在符號庫中的名字可能為_foo,而C++編譯器則會產生像_foo_int_int之類的名字。
【知識點】
#ifdef__cplusplus 是什么意思?時常在cpp的代碼之中看到這樣的代碼: #ifdef__cplusplus extern"C" { #endif//眾多函數的聲明,形如void show1(); void show2();等#ifdef__cplusplus } #endif【疑問1】為什么要引入#ifdef__cplusplus...extern"C"...語法?因為在.h頭文件聲明的函數,不知道這些函數是在.c文件中實現還是在.cpp文件中進行實現。如果不用上面的語法,最后在main.c文件中或者main.cpp文件中使用上面已經實現的函數的時候,會由于C和C++編譯器的不同,導致找不到函數引起“編譯失敗”。所以,才引入了上面的語法,該語法帶來的好處是:在.h頭文件聲明的函數,無論是在.c文件中實現還是在.cpp文件中實現,最后在main.c文件中或者main.cpp文件中使用上面已經實現的函數的時候,都會編譯成功————>這樣就實現了C與C++的混合編程。【疑問2】void show1(); void show2();上面兩個函數是.c代碼?還是.cpp代碼?由什么決定?答:由show1()、show2()函數在.c或者.cpp實現決定。(show函數如果在.c中實現,show函數就是.c代碼;show函數如果在.cpp中實現,show函數就是.cpp代碼)【疑問3】 有疑問2知道了該函數是.c代碼還是.cpp代碼之后,我們一般怎么使用這個結論呢?以下面程序為例:void show(){#ifdef __cplusplus //如果show是.cpp代碼,就調用下面的......#else //如果show不是.cpp代碼,就調用下面的......#endif //#ifdef __cplusplus }====================================================================================================
綜合示例
由于不知道在頭文件中聲明的函數是在.c文件中定義?還是在.cpp文件中定義? -->因此 ①在頭文件中引入#ifdef __cplusplus extern "C"{ //所有函數的聲明 }語法。 ②在.c文件 \ .cpp文件中可以實現在.h文件中聲明的函數。 ③在main.c文件 \ main.cpp文件中可以調用在②中實現的函數,且程序的執行結果一樣。 【下面程序的功能介紹】 //在頭文件中聲明兩個函數:show1()和show2(); //show1()在.cpp文件中實現,show2()在.c文件中實現; //在main.c或者main.cpp文件中調用show1()和show2()函數,執行結果一樣。---------------------------------------------------------------------//head.h #ifndef _HEAD_H_ #define _HEAD_H_#ifdef __cplusplus #include <iostream> using namespace std; extern "C" { #endifvoid show1();void show2(); #ifdef __cplusplus }; #endif#endif --------------------------------------------------------------------- //define_show1.cpp #include "head.h"void show1() { #ifdef __cpluspluscout<<"show1:這是一個c++程序"<<endl; #elseprintf("show1:這是一個C程序\n"); #endif } --------------------------------------------------------------------- //define_show2.c #include "head.h"void show2() { #ifdef __cpluspluscout<<"show1:這是一個c++程序"<<endl; #elseprintf("show2:這是一個C程序\n"); #endif } --------------------------------------------------------------------- //main.c或者main.cpp(二者運行結果一樣) #include "head.h"int main() {show1();show2();getchar(); }【輸出結果如下圖所示】 分析輸出結果:輸出結果由 實現show1()函數和實現show2()函數是在.c還是在.cpp 所決定!總結
以上是生活随笔為你收集整理的第五天2017/04/06(下午1:C、C++混合编程 与 #ifdef __cplusplus extern C{ })的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第五天2017/04/06(上午:文件的
- 下一篇: 第五天2017/04/06(下午3:静态