为啥要使用extern “C”
含义
- 主要是告诉编译器,extern “C”里面的内容采用C语言编译
- 单纯作为extern类型,是表示该函数或者变量可以被其他模块引用
另外需要注意的是,extern “C” 不能修饰类相关的函数或者变量,应为类相关的都是C++的特性,在C中并没有。
用的原因
C++支持函数重载,所以在编译的时候,会根据函数名,函数参数,类型唯一生成一个对于的函数符号,用来一一对于调用,比如
int foo( int x, int y );
C++编译后,其函数名可能是_foo_int_int。而C语言编译后,函数名则是_foo,如果没有声明extern “C”,采用了C++的编译方式,那么就会出现找不到对应函数名的情况。这就是为啥要用的原因。
应用场景
典型用法,采用C写的库,要在C++中调用。
// This is C++ code
extern "C" {
// Get declaration for f(int i, char c, float x)
#include "my-C-code.h"
}
int main()
{
f(7, 'x', 3.14); // Note: nothing unusual in the call
// ...
}