宏__cplusplus


宏__cplusplus有2個作用:
1)用於C/C++混合代碼;
2)用於判斷C++版本;

C, C++混合代碼

編寫C/C++混合代碼時,頭文件常會有如下聲明:

#ifdef __cplusplus
extern "C" {
#endif

// C代碼

#ifdef __cplusplus
}
#endif

這種頭文件可以被#include到C文件(.c)中進行編譯,也可以被#include到C++文件(.cpp/.cxx/.cc等)中進行編譯。因為extern "C"可以抑制C++對函數名、變量名等符號(symbol)進行名稱重整(name mangling),因此,編譯出的C目標文件和C++目標文件中的變量、函數名稱等符號相同,而沒有重整。這樣,鏈接器可以可靠地對兩種類型的目標文件進行鏈接。

C++標准版本

除了編寫C/C++混合代碼時用到,__cplusplus也常用於判斷編譯器支持的C++標准,如C++03標准中,__cplusplus值被預定義為199711L,C++11標准中,__cplusplus被預定義為201103L。

例如,程序員如果想要確定代碼使用支持C++11編譯器進行編譯時,可這樣檢測:

#if __cplusplus < 201103L
    #error "should use C++11 implmentation"
#endif

當不支持代碼編譯C++11時,會立即報錯並終止編譯。


免責聲明!

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



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