对于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_就不成立了,也就不会再次加载这个文件了。