我有一个混合C和C ++的项目。在C头文件中,我有这样的代码:
typedef struct mystruct* mystruct;
struct mystruct {
// whatever struct needs
};
要在C ++文件中使用它,我正在做:
extern "C" {
#include "mystruct.h"
}
所以你看到我正在创建一个使用相同名称的不透明指针。这在C中很好,但在C ++中却没有(因为要求在C中使用struct关键字进行实例化,而不是在C ++中实例化)。但是,在尝试编译C ++代码时出现错误(冲突的声明)。我认为使用extern "C"
会使编译器将C头视为C,但似乎仍然将它用作C ++。对这里发生的事情有什么解释吗?
答案 0 :(得分:11)
我认为使用
extern "C"
会使编译器将C头视为C
没有。 extern "C"
唯一能做的就是控制名称修改。代码仍然编译为C ++(虽然需要修改名称的东西,例如名称空间或模板,不起作用)。特别是,有关struct
标识符的规则仍然适用。
答案 1 :(得分:1)
extern“C”强制执行C链接,而不是受损的C ++链接。 extern“C”不强制执行完全C合规性,例如动态大小的数组等。