我正在做一个有很多遗留C代码的项目。我们已经开始用c++编写,目的是最终转换遗留代码。我对C和c++如何交互有点困惑。我知道通过用extern "C"
包装C代码,c++编译器不会损坏C代码的名称,但我不完全确定如何实现这一点。
因此,在每个C头文件的顶部(在include守卫之后),我们有
#ifdef __cplusplus
extern "C" {
#endif
在底部,我们写上
#ifdef __cplusplus
}
#endif
在这两者之间,我们有所有的include、typedef和函数原型。我有几个问题,看看我是否理解正确:
如果我有一个c++文件A.hh
包含C头文件B.h,
包含另一个C头文件C.h,
这是如何工作的呢?我认为
当编译器进入B.h,
__cplusplus
将被定义,因此它
将用extern "C"
(而__cplusplus
将不会
在此块中定义)。所以,
当它进入C.h,
__cplusplus
将不会被定义
代码不会被包装
extern "C"
。这对吗?李< / p > < / >
有什么问题吗
用。包装一段代码
extern "C" { extern "C" { .. } }
吗?
第二个extern "C"
会是什么
做什么?李< / p > < / >
我们不把这个包装器放在。c文件上,只放在。h文件上。那么,如果一个函数没有原型会发生什么呢?编译器认为它是一个c++函数吗?
extern "C"
。
这是正确的处理方式吗
了吗?李< / p > < / >
最后,这个设置是个好主意吗? 我们还需要做些什么吗? 我们将混合使用C和c++ 在可预见的未来,而我 我想确保我们都涵盖了 李我们基地。< / p > < / >