在 c++ 程序中调用被 c 编译器编译后的函数,为什么要加 extern “C” 声明?
首先, extern 是 C/C++ 语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。
通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字 extern 声明。 extern "C" 是连接申明 (linkage declaration), 被 extern "C" 修饰的变量和函数是按照 C 语言方式编译和连接的。作为一种面向对象的语言, C++ 支持函数重载,而过程式语言 C 则不支持。函数被 C++ 编译后在符号库中的名字与 C 语言的不同。例如,假设某个函数的原型为: void foo( int x, int y ); 该函数被 C 编译器编译后在符号库中的名字为 _foo ,而 C++ 编译器则会产生像 _foo_int_int 之类的名字。这样的名字包含了函数名、函数参数数量及类型信息, C++ 就是靠这种机制来实现函数重载的。
所以,可以用一句话概括 extern “ C ”这个声明的真实目的 : 解决名字匹配问题,实现 C++ 与 C 的混合编程。