【发布时间】:2021-05-01 05:39:47
【问题描述】:
我想做一个工具,自动将C 库包装在:
#ifdef __cplusplus
extern "C" {
#endif
但我对 什么 究竟需要用extern "C" 包裹,而什么不需要包裹感到困惑。只有功能?任何 (shock-horror) 全局变量呢?还有什么?
如果我编写一个脚本,只查找所有函数并用extern "C" 包装它们,就够了吗?
最后:如果库已经用extern "C" 包装了它的函数,然后它们又被包装了,我可以相信没有任何不好的事情发生并且它仍然可以正常工作,还是我需要明确检查这一点?
【问题讨论】:
-
extern "C"可能不是您唯一需要担心的事情。一些结构在 C 中有效,但在 C++ 中无效(例如匿名结构)。 C 库头文件需要不含此类结构。另请参阅en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B。