對於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_就不成立了,也就不會再次加載這個文件了。