引言:
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。
比如说你用C 开发了一个DLL 库,为了能够让C ++语言也能够调用你的DLL输出(Export)的函数,你需要用extern "C"来强制编译器不要修改你的函数名。
1、C文件里面的extern的用法
如果头文件采用的是cExample.h
实现头文件里面的方法在cExample.c
调用头文件里面的方法的函数在cFile.c
编译方式为:gcc -c cExample.c ;gcc -c cFile.cpp;gcc -o test cFile.o cExample.o生成可执行文件test。
Ps:如果把头文件里面的extern加在函数的前面同样可以进行编译
2、C++文件里面的extern的用法(C++文件里面包含C语言的头文件)
调用头文件里面的方法的函数在cppFile.cpp
编译该文件可以实现在C++文件里面编译C的头文件
编译的方法为:
生成可执行文件test7
Ps:如果加上头文件cExample.h里面的extern也可以进行编译
3、C++文件里面使用extern
如果头文件采用的是cppExample.h
实现头文件里面的方法在cppExample.cpp
调用头文件里面的方法的函数在cppFile.cpp
Ps:如果cppExample.h里面采用extern “C” int add(int x,int y);进行编译也可通过,同样采用extern int add(int x,int y);也可以通过。
编译方式为:g++ -c cppExample.c ;g++ -c cppFile.cpp;g++ -o test cppFile.o cppExample.o生成可可执行文件test。