extern "C" 和 extern "C++" 的区别,首先我们先认识一个概念——语言的链接性。
C语言链接性:在C语言中,一个名称只对应一个函数,因此中很容易实现。为满足内部需要,C语言编译器可能将spiff这同样的函数名翻译为_spiff。
C++语言链接性:在C++中,同一个名称可能对应多个函数,必须将这些函数翻译为不同的符号名称。因此C++编译器执行名称矫正或名称修饰,为重载函数生成不同的符号名称。
eg:
spiff(int)转换为_spiff_i
spiff(double, double)转换为_spiff_d_d;
所以为了解决在C++程序中使用C库中预编译的函数,我们可以使用extern "C" 或 extern "C++"。
extern "C" void spiff(int); //原型使用C语言链接性
extern void spiff(int); 或者 extern "C++" void spiff(int); //原型使用C++语言链接性