c/c++两种语言不同的连接性,extern “C”;extern “C++”:
c++中不可以直接使用c函数,c中也不可以直接使用c++;
知识前提:链接程序要求每个不同的函数都有不同的符号名。
c语言中,一个名称只对应一个函数,C语言编译器会将spiff这样的函数名翻译为_spiff,此为C语言连接性。
c++中,函数重载使得一个名称可以对应多个函数,对函数名的翻译会加上其参数种类,可能将spiff(int)转换为_spiff_i或者_spiff_int,将spiff(double,double)翻译为_spiff_d_d或则_spiff_double_double,此为c++语言连接。
不同的语言连接下,c中直接调用c++函数或者c++中直接使用c函数都是不合适且易报错的,因为连接性不同。
解决方法是在调用函数时在函数前面增加extern "C"或者extern "C++"以区分调用的函数的连接性,例如:
使用c语言连接性
extern "C" void spiff(int);//使用c语言连接性
默认使用c++连接性
extern void spiff(int);//默认使用c++连接性
显式使用c++连接性
extern "C++" void spiff(int);//显式使用c++连接性