C++是一种面向对象的语言,支持函数的重载,而C语言是面向过程的语言,不支持函数的重载。同一个函数在C++环境编译后与其在C语言环境下编译后,在符号表中的签名是不同的。假如有一个函数:
void decode(float position, float duration);
在C语言环境下编译出来的签名为_decode,而在C++语言环境下,一般编译器生成的函数签名类似_decode_float_float。虽然在编译阶段是没有问题的,但是在连接阶段,如果不加extern "C"关键字的话,那么将会链接_decode_float_float这个方法签名。而如果加了extern “C”关键字的话,那么寻找的方法签名就是_decode。