有没有办法对 C 和 C++ 之间兼容的结构进行零初始化

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 个字段,这会导致拼写错误。

问题:是否有使用通用约定,或者不需要了解字段的交叉兼容初始化方式?

Vla*_*cow 2

本声明

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)

  • @zak你选择的警告设置不是C++的问题? (3认同)