在C ++中使用C风格的struct / typedef

时间:2011-07-12 20:35:23

标签: c++ c struct typedef extern

我有一个混合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 ++。对这里发生的事情有什么解释吗?

2 个答案:

答案 0 :(得分:11)

  

我认为使用extern "C"会使编译器将C头视为C

没有。 extern "C"唯一能做的就是控制名称修改。代码仍然编译为C ++(虽然需要修改名称的东西,例如名称空间或模板,不起作用)。特别是,有关struct标识符的规则仍然适用。

答案 1 :(得分:1)

extern“C”强制执行C链接,而不是受损的C ++链接。 extern“C”不强制执行完全C合规性,例如动态大小的数组等。