Zak*_*Zak 5 c c++ struct initialization
问题:我想编写一个 C 和 C++ 之间交叉兼容的代码示例。
例如,我有一个像这样的普通数据(POD)结构......
typedef struct blob {
int size;
uint8_t * data;
} blob;
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以将其初始化为零,并且在 C 和 C++ 中都有效?
如果我理解正确,以下初始化程序在两种语言中都无效:
blob b = {0}; // valid C, invalid C++
blob b = {}; // valid C++, invalid C
Run Code Online (Sandbox Code Playgroud)
到目前为止我发现的最好的是:
blob b = {0,0};
Run Code Online (Sandbox Code Playgroud)
...这没关系,但真正的结构有 8 个字段,这会导致拼写错误。
问题:是否有使用通用约定,或者不需要了解字段的交叉兼容初始化方式?
本声明
blob b = {0};
Run Code Online (Sandbox Code Playgroud)
在 C 和 C++ 中都有效。
如果 C++ 编译器支持 C++ 20 标准,那么你也可以编写
blob b = { .size = 0, .data = 0 };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |