#ifdef __cplusplus


本來這個是只應該出現在運用cpp編程的工程中的,但是,就算是單片機編程,都已經會看到這個了,所以提出來解釋一下。

條件編譯,屬於c/c++共有的,但是由於在有些場合,在c++代碼內嵌c語言能使編程更加便利。

使用c語言編譯器gcc編譯下面代碼:

#include<stdio.h>

#ifdef __cplusplus
extern "C" {
#endif
    int a=10;
#ifdef __cplusplus
}
#endif
int main(void)
{
    printf("%d",a);
    return 0;
}

預編譯(gcc -E)之后是這樣的:

這樣可以確定在C語言gcc編譯器中是沒有__cplusplus這個宏的,那么我們用g++編譯器上面程序呢?

可以看出g++預編譯之后,能夠識別__cplusplus這個宏。

所以,結論已經很明顯了。本來如同#ifdef  XXXXX這樣的條件編譯,需要人為定義一個匹配的宏,但是,在c++編譯器中,已經內置了這個宏的定義,所以在使用c++編譯器編譯其他語言(這里是C語言,當然得編譯器支持的語言哈)時,用上這樣的方式,可以讓編譯器把extern “C”代碼塊中的內容按照C語言的編譯方式進行編譯。為什么要這樣呢?因為c++中支持函數重載,而C語言不支持,c++對函數經過了其他處理,如果不加extern “C”限制按照C語言的方式編譯,那么c++編譯器在編譯C語言函數時可能就會找不到鏈接路徑而報錯。

那么再看到下面這種代碼,應該也不會再陌生了。

#ifdef __cplusplus
extern "C" {
#endif

/*add somethings*/


#ifdef __cplusplus
}
#endif


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM