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);
    ...
}
View Code

相关文章:

  • 2021-06-15
  • 2021-08-31
  • 2021-08-12
  • 2021-08-04
  • 2021-11-19
  • 2022-01-22
  • 2022-03-09
  • 2022-01-16
猜你喜欢
  • 2021-07-20
  • 2022-12-23
  • 2021-12-09
  • 2021-09-21
  • 2022-12-23
  • 2021-11-26
  • 2021-12-25
相关资源
相似解决方案