C與C函數(shù)的頭文件兼容宏定義.doc

C與C函數(shù)的頭文件兼容宏定義.doc

ID:62033241

大小:20.00 KB

頁數(shù):5頁

時間:2021-04-15

C與C函數(shù)的頭文件兼容宏定義.doc_第1頁
C與C函數(shù)的頭文件兼容宏定義.doc_第2頁
C與C函數(shù)的頭文件兼容宏定義.doc_第3頁
C與C函數(shù)的頭文件兼容宏定義.doc_第4頁
C與C函數(shù)的頭文件兼容宏定義.doc_第5頁
資源描述:

《C與C函數(shù)的頭文件兼容宏定義.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫

1、關(guān)于“#ifdef __cplusplus” 和"extern"C”" 看一些程序的時候老是有“#ifdef __cplusplusextern"C" {?#endif”的定義,搞搞清楚是怎么回事:Microsoft-Specific?。校騟defined Macros__cplusplus?。膃finedforC++programsonly.?意思是說,如果是C++程序,就使用extern”C”{而這個東東,是指在下面的函數(shù)不使用的C++的名字修飾,而是用C的Thefollowing?。鉶de?。骽

2、owsa headerfilewhichcan?。猓濉sedbyCandC++clientapplications:?//MyCFuncs.h#ifdef __cplusplus?extern?。” {//only needtoexportC interfaceif// usedbyC++sourcecode#endif__declspec(dllimport) void MyCFunc();?__declspec(dllimport)void AnotherCFunc();#ifdef __cp

3、lusplus?}?#endif當(dāng)我們想從C++中調(diào)用C的庫時,(注,驅(qū)動是用C寫的,連new、delete也不能用,郁悶)不能僅僅說明 一個外部函數(shù),因?yàn)檎{(diào)用C函數(shù)的編譯代碼和調(diào)用C++函數(shù)的編譯代碼是不同的。如果你僅說明一個外部函數(shù), C++編譯器假定它是C++的函數(shù)編譯成功了,但當(dāng)你連接時會發(fā)現(xiàn)很可愛的錯誤。解決的方法就是指定它為C函數(shù):extern ”c” 函數(shù)描述?指定一群函數(shù)的話:?extern”C"{?n個函數(shù)描述?}如果想C和C++混用的話:#ifdef_cplusplus ?exte

4、rn ”C”{?#endif ?n個函數(shù)描述#ifdef_cplusplus ?}#endifextern "C"表示編譯生成的內(nèi)部符號名使用C約定。???C++支持函數(shù)重載,而C不支持,兩者的編譯規(guī)則也不一樣。函數(shù)被C++編譯后在符號庫中的名字與C語言的不同.例如,假設(shè)某個函數(shù)的原型為:void foo( int?。?,inty);該函數(shù)被C編譯器編譯后在符號庫中的名字可能為_foo,而C++編譯器則會產(chǎn)生像_foo_int_int之類的名字(不同的編譯器可能生成的名字不同,但是都采用了相同的機(jī)制,生

5、成的新名字稱為“mangledname”)。_foo_int_int這樣的名字包含了函數(shù)名、函數(shù)參數(shù)數(shù)量及類型信息,C++就是靠這種機(jī)制來實(shí)現(xiàn)函數(shù)重載的。下面以例子說明,如何在C++中使用C的函數(shù),或者在C中使用C++的函數(shù)。?//C++引用C函數(shù)的例子?//test.c?#include〈stdio.h〉?voidmytest()?{?printf("mytestin。cfileok");}//main.cppextern ”C"{?voidmytest();}?intmain(){mytest

6、();return 0;?}//在C中引用C++函數(shù)?在C中引用C++語言中的函數(shù)和變量時,C++的函數(shù)或變量要聲明在extern”C"{}里,但是在C語言中不能使用extern"C",否則編譯出錯。?//test.cpp#include

7、們都將函數(shù)聲明放在頭文件,當(dāng)我們的函數(shù)有可能被C或C++使用時,我們無法確定是否要將函數(shù)聲明在extern"C"里,所以,我們應(yīng)該添加?#ifdef?。達(dá)cplusplus?extern”C"{#endif?//函數(shù)聲明#ifdef__cplusplus?}?#endif如果我們注意到,很多頭文件都有這樣的用法,比如string。h,等等.?//test.h?#ifdef__(dá)cplusplus?#include〈iostream>usingnamespace std;?extern"C”?{?#end

8、ifvoidmytest();?#ifdef__(dá)cplusplus}?#endif?這樣,可以將mytest()的實(shí)現(xiàn)放在.c或者。cpp文件中,可以在。c或者。cpp文件中include ”test.h"后使用頭文件里面的函數(shù),而不會出現(xiàn)編譯錯誤。?//test.c?#include”test.h"?voidmytest(){?#ifdef__cpluspluscout<<"cout mytestexternok"<<endl;#else?printf

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。