Author: YuMaNzI
Date: 2015/04/13
---------------------------------------------------------------
在实际中,我们可能会遇到开发一个CPP的项目,而某一个模块的功能已经有现有的C实现的库可以使用的情况。在CPP中通过Include头文件+lib或其它的方式调用相应的C函数,编译时会报LNK2001 unresolved external symbol错误,即找不到头文件对应的函数体。出现这种错误的根本原因在于CPP在处理重载时对函数名做了特殊的处理。
C语言是不支持重载的,即所有函数不能重名。另一方面,C++是支持重载的,函数重名则进一步用变量区分不同的重名函数。因此对同一个简单的函数声明:
int add(int a, int b);
CPP会产生_add_int_int之类的名字,即用函数名+变量的形式支持函数的重载;而C则直接生成_add作为函数的名字。在默认的链接方式下,CPP按照自己的方式生成函数名,即认为此函数的名字是带变量类型的。后续在lib文件中按照这个名字找函数体时,由于找不到,最终返回LNK2001的错误。
为了解决这个问题,CPP提供了一个C引用的指定符号,例如在某