我想知道 C++ 和 C 的混合使用有多广泛。我的意思是使用 C 库/函数并在 C++ 程序中调用它,就像它是如何在这里完成的Mix C with C++一样。它在现实世界中的使用范围有多大?它是很少使用、大部分避免使用还是很常见?任何人都可以照亮它吗?
问问题
109 次
1 回答
0
这是相当普遍的。你可以
用 C++ 编译器编译 C 的东西没有任何问题好的,其他人指出这绝对不是真的:我可以期待用 C++ 编译器编译 C 代码有什么问题?
或者
- 使用使用 C 编译器编译的目标文件、静态库和动态库,但是您应该知道 C++ 编译器会进行名称修饰而 C 编译器不会(因为 C 不允许名称重载,但 C++ 允许)。在这种情况下,有
extern "C"
使用 C 链接的链接器指令,即不会破坏已用 C 编译器编译的名称。
有关如何在 C++ 中使用 C 链接的良好解释,请参阅例如这里的答案:https ://stackoverflow.com/a/1041880/12118546
这就是你经常看到这样的代码的原因
#ifdef __cplusplus
extern "C" {
#endif
// all of your legacy C code here
#ifdef __cplusplus
}
#endif
示例来自:https ://stackoverflow.com/a/12994075/12118546
如果您忘记了这一点,就会导致像这样的神秘链接器错误:
...
/home/AbiSfw/ccvvuHoX.o: In function `main':
prog.cpp:(.text+0x19): undefined reference to `foo()'
...
于 2021-08-19T17:18:26.667 回答