日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

第五天2017/04/06(下午1:C、C++混合编程 与 #ifdef __cplusplus extern C{ })

發布時間:2025/3/21 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第五天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++的混合編程?!疽蓡?span id="ozvdkddzhkzd" class="hljs-number">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{ })的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。