extern "C"理解

来源:互联网 发布:java 线程池 demo 编辑:程序博客网 时间:2024/04/29 18:28

       在C++中引用C编译器编译过的函数的时候就会用到:extern "C"这个关键字.如下就是在C++环境中引用C

函数的例子:

***************************************************Begin*******************************************************

 /* c语言头文件:cExample.h */

 #ifndef C_EXAMPLE_H

#define C_EXAMPLE_H

extern int add(int x,int y);

#endif

/* c语言实现文件:cExample.c */

#i nclude "cExample.h"

int add( int x, int y )

{

       return x + y;

}

// c++实现文件,调用add:cppFile.cpp

extern "C"

{

#i nclude "cExample.h"

}

int main(int argc, char* argv[])

{

       add(2,3);

       return 0;

}

如果C++调用一个C语言编写的.DLL时,当包括.DLL的头文件或声明接口函数时,应加extern "C" { }。
 

***************************************************End*********************************************************

     造成这种现象的原因是C语言和C++的编译器不同,众所周知,C++支持函数重栽,C不支持函数重栽,而经过

编译的函数名称是唯一的,为了适应这种需求,C++编译器会在函数名中加入一些新的信息,比如同样对 int Test()

函数进行编译,C生成的新名称是_test,而C++编译器生成的新名称是_Test_int.

   基于这种原因,在进行C和C++混合编程的时候,一定要加上extern "C",通过C编译器的方式编译引用文件,从而

找到你要调用的函数,否则编译出错.