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

Using C-style struct/typedef from within C++

本文关键字:struct typedef 风格 c++      更新时间:2023-10-16

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

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

extern "C"所做的唯一一件事就是控制名称混淆。代码仍然被编译为c++(尽管需要混乱名称的东西,如名称空间或模板,将无法工作)。特别是,关于struct标识符的规则仍然适用。

extern "C"强制C链接,而不是混乱的c++链接。extern "C"不强制完全遵从C,例如动态大小的数组等。