将 C 与 C++ 混合使用有多常见?

How common is it to mix C with C++?

我想知道 C++ 和 C 的混合使用有多广泛。我的意思是使用 C libraries/functions 并在 C++ 程序中调用它,就像这里的做法一样 Mix C with C++。它在现实世界中的使用有多广泛?它是很少使用、大部分避免还是很常见?任何人都可以阐明它吗?

这很常见。你可以

  • 用 C++ 编译器编译 C 的东西没有任何问题 好的,其他人注意到这绝对不是真的:What issues can I expect compiling C code with a C++ compiler?

  • 同时使用目标文件、用 C 编译器编译的静态库和动态库,但是你应该知道 C++ 编译器会做而 C 编译器不会做的名称重整(因为 C 不允许名称重载,但是C++ 可以)。在这种情况下,有 extern "C" 链接器指令使用 C 链接,即不破坏已使用 C 编译器编译的名称。

有关如何在 C++ 中使用 C 链接的详细说明,请参阅例如到这里的这个答案:

这就是您经常看到这样的代码的原因

#ifdef __cplusplus
extern "C" {
#endif

// all of your legacy C code here

#ifdef __cplusplus
}
#endif

样本来自:

如果您忘记了这一点,就会出现像这样的神秘链接器错误:

...
/home/AbiSfw/ccvvuHoX.o: In function `main':
prog.cpp:(.text+0x19): undefined reference to `foo()'
...

样本来自: