1、为什么要进行方法名重整?
C++支持过载,允许方法名相同,形参表不同。对于同名的方法,编译器根据形参表的不同,对方法名重整为另一个方法名,也就是建立一种映射。这就是为什么要进行方法名重整。同时编译器,进行了扩展,也就是说,没有过载的方法也进行了方法名重整。
2、方法名重整带来的问题
C中没有过载的概念,也就是不允许出现同名的方法。因此,也就没有方法名重整。考虑下面的情况:在C++使用C语言库中的方法,int add(int a);C中提供了add方法的实现,C++中包含头文件,声明方法,然后使用。C代码生成的目标文件中,方法名没有重整,还是add,而C++代码方法名进行了重整,假设重整为addint,当连接时,C++试图寻找方法addint,但是却找不到,连接错误。
3、如何解决上面的问题?
问题的关键是C++对方法名进行了重整,因此就不要让C++对方法名重整。想调用C中的方法,在声明方法的时候,加上extern "C",告诉编译器不要对方法名重整。