1 C ++和C ++相互調用。
在嵌入式系統中,大多數底??層和驅動程序層都是使用C語言開發的,而上層應用程序和服務則是使用諸如面向對象開發的C ++之類的高級語言開發的。
方式上,存在上層調用底層接口的問題,例如,最常用的C ++調用C接口以完成相應的外圍設備驅動程序接口。
我們知道C ++幾乎與C完全兼容。
不同的編譯語言都有自己的一套編譯規則。
當然,C語言和C ++的編譯規則是不同的,但是C ++編譯器等效于與C語言兼容,以便與C語言兼容。
編譯方法,而C語言編譯器通常與C ++編譯方法不兼容。
因此,從理論上講,使用C編譯器編譯的模塊可以直接通過C ++調用。
2extern關鍵字因為默認情況下C ++編譯器根據C ++編譯方法編譯源文件,所以C語言文件也將直接在C ++中編譯。
對于底層驅動程序等,它將以用C語言編寫的DLL給出,然后將其從函數導出到C或C ++模塊以進行訪問,因此仍然需要以C ++語法將其標識給編譯器,這需要要使用C ++進行編譯,則需要使用C進行編譯。
然后,通過外部“ C”完成此編譯區別,下面以一個示例來看一下如何使用它。
//FileName:main.c#include#include#include“Cal.h”intmain(intargc,char**argv){printf("Cal(int):%d“,Cal(5)); printf(” ; Cal(float):%。
5f“,Cal(1.1f)); return0;} // FileName:Cal.c#include” Cal.h“ intCal(intVal){returnVal * Val;} floatCal(floatVal){ returnVal * Val;} //文件名:Cal.h#ifndef__CAL_H __#define__CAL_H __ // extern“ C” // {intCal(intVal); floatCal(floatVal); //}#endif注釋部分指示校準。
該c文件將用C編譯。
由于C ++支持函數重載并且C語言不支持函數重載,所以上述源代碼可以直接被編譯和傳遞,并且一旦外部“ C”被返回,則該源代碼可以被編譯。
注釋被刪除,編譯將失敗。
3互調操作上面的兄弟繪制了互調的示意圖,并分別進行了解釋:1)C ++編譯器可以通過extern“ C”直接調用用C編譯的庫文件,并最終與其他文件一起編譯。
成為可執行文件。
2)C ++編譯器首先在外部“ C”中編譯模塊。
模式,C編譯器直接獲取模塊文件,并將其與其他文件一起編譯以生成可執行文件。
4技巧:__cplusplus的宏定義通常內置在C ++編譯器中。
然后,我們可以使用此宏設置預編譯的結構。
在C ++編譯器中時,請使用extern“ C”。
來編譯C模塊代碼,否則只需刪除它,相信您會在某些庫文件中經常看到它。
#ifdef__cplusplusextern“ C” {#endif // fuctiondefinitionordeclaration#ifdef__cplusplus} #endif