在c++中使用C风格的struct/typedef
Using C-style struct/typedef from within C++
我有一个混合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,例如动态大小的数组等。
相关文章:
- C++:TypeDef使用元组
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- "typedef"类型名称是否可以像"struct"定义那样声明指向结构的指针?
- 错误:使用 tesseract 引擎时 C++ 中的声明'typedef struct tagBLOB BLOB'冲突
- typedef struct vs struct - "struct"的存储大小未知
- __stdcall typedef struct
- 在类中使用"typedef struct"
- What is struct NIL { typedef NIL Head; }?
- 等效于C Typedef struct与C#
- 如何在未知的Typedef struct和QbyTearray之间进行序列化和应序列化
- C++ typedef struct vs class
- 在C 中正确从C库中初始化Typedef struct
- 命名线程,使用 typedef/struct
- Xcode typedef 的 struct 创建错误/警告
- C++typedef中的struct关键字
- typedef struct 指针进入 JNA
- typedef如何代替Procedure c++的struct/class工作
- 在c++中使用C风格的struct/typedef