1. C++和C混合使用的前提之一就是编译器产生兼容的目标文件(.lib和.dll等).所谓"兼容",指的是编译器在"预编译器相依的特性上"一致,如int和double大小,参数压栈机制等,只有在这个基础上才能讨论结合使用C++和C模块的问题.
2. 在1的基础上,要结合使用C++和C的模块,主要有以下几点需要注意:
1). name mangling(名称重整)
Name mangling是C++用于支持函数重载的机制,它对重载的函数名称进行一定改变,使得每个函数具有独一无二的名称,由于C不支持函数重载,因此也就不需要name mangling.
如果C++要调用C函数库的某个函数,如果不抑制name mangling,经由name mangling后的函数名称可能与C函数库的原函数名称不匹配,因此就会导致链接失败.解决方法就是使用extern C阻止name mangling,像这样:
extern "C" void simulate(int iterations);
这样C++编译器在编译C++文件时就会避免对simulate进行name mangling,转而采用和C相同的命名方式.extern "C"只对接下来的一个函数有效,如果要同时为多个函数使用extern "C",可以使用中括号:
extern "C" { void drawLine(int x1, int y1, int x2, int y2); void twiddleBits(unsigned char bits); void simulate(int iterations); ... }