1. 程式人生 > >__cplusplus的用法(轉)

__cplusplus的用法(轉)

縮進 def com 頭文件 需要 c/c++ bsp c++編譯 可能

經常在/usr/include目錄下看到這種字句:

#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif

不太明白是怎麽用的。今天閱讀autobook,在第53頁看到了作者的解釋:C/C++編譯器對函數和變量名的命名方法不一樣(例如C++中重載的函數有多個名字,而C的函數只有一個名字),這樣當C編譯器去引用C++編譯器編譯出來的符號時,會找不到鏈接。因此,當一個頭文件可能既被C程序引用,又被C++程序引用時,需要使用如上代碼進行區分。

上面的寫法太復雜了,況且兩個大括號{和}分離,會造成有些編輯器的縮進錯誤。更好的手法是將如下代碼定義在一個公共頭文件中,然後所有其它頭文件去引用它:

#ifdef __cplusplus
# define BEGIN_C_DECLS extern "C" {
# define END_C_DECLS }
#else
# define BEGIN_C_DECLS
# define END_C_DECLS
#endif

有關__cplusplus和extern "C"的更多用法,可以參考下文:

《C++中extern “C”含義深層探索》
http://hi.baidu.com/17cpp/blog/item/a46bfd13a4816e025aaf53f6.html

__cplusplus的用法(轉)