C++头文件中的extern “C”的作用,一般都是如下形式
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
中间还有很多其他的
#ifdef __cplusplus
}
#endif /* __cplusplus */
首先要清楚的是 extern “C”是只有C++编译器才理解的东西,C的编译器会报错的。C++编译器添加这个的目的是为了让c的代码和c++代码能更好的一起工作。
因为编译之后函数的名字都是存放在符号表中的,而且C和C++为函数命名的方式是不同的,如下例
void foo( int x, int y );
c编译后函数名字:_foo
c++编译后名字:_foo_int_int
c++这种方式叫做mangled name,是将函数参数类型加了进来,用以支持重载, 如果用 extern “C”包围的话,C++在编译是就会使用C的函数命名方法来命名
参考: 这篇文章