extern “c” 詳解

對於extern “c”的理解,一直不是很清楚,今天特意上網查看了,發現明朗多了,顧此總結一下:

#ifndef __MYTEST_H_ 
#define __MYTEST_H_  
#ifdef __cplusplus 
extern "C" { 
#endif  
int add(int x,int y); 
#ifdef __cplusplus 
} 
#endif  
#endif  

 

典型的c++寫法

#ifdef 

#endif

這種是成對出現的,叫條件編譯,如果條件成立,那麼中間的部分就會參與編譯,不成立,中間的部分不參與編譯,相當於被刪除了。

extern "C"{} 是爲了在c++中兼容c代碼,表示{}中是代碼是標準的c 語言代碼,要用c的編譯器來編譯,而不是用c++的編譯器來編譯

 

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif

光看這兩部分,如果__cplusplus成立,那麼這個就成對了,整個就相當於

#ifndef __MYTEST_H_ 
#define __MYTEST_H_  
extern "C" { 
int add(int x,int y); 
} 
#endif  

 

#ifndef __MYTEST_H_
#define __MYTEST_H_

#endif

這三句又是一個整體,是爲了防止加載多次頭文件,因爲一般來說,我們的源文件會加載很多頭文件,如果同一個頭文件加載多次,明顯就浪費了空間,所以用這種結構來避免


如果從來沒加載過這個頭文件, __MYTEST_H_沒定義,所以條件成立

然後定義#define __MYTEST_H_如果還有另外一個源文件加載了這個頭文件,此時由於之前加載過__MYTEST_H_就已經定義過了,#ifndef __MYTEST_H_就不成立了,也就不會再次加載這個文件了。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章