extern “c” 详解

来源:互联网 发布:主宰西游灵宠进阶数据 编辑:程序博客网 时间:2024/05/18 02:10

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

 

 

 

0 0
原创粉丝点击