问题: 我想编写一个跨C和C++兼容的代码示例。
我有一个普通的数据结构(POD),例如像这样...
typedef struct blob {
int size;
uint8_t * data;
} blob;
有没有一种简单的方法可以在 C 和 C++ 中都有效地进行零初始化?
如果我理解正确,在这两种语言中,以下初始化器都无效:
blob b = {0}; // valid C, invalid C++
blob b = {}; // valid C++, invalid C
到目前为止,我发现最好的是:
blob b = {0,0};
现有代码中只定义了一个结构体的部分字段,虽然目前看起来还可以,但是如果继续这样做,就会变成拼写错误。实际结构体有8个字段,这就需要注意。
问题:是否有常用惯例或跨平台的初始化方式,不需要知道结构体的所有字段?
blob b = {0};
是合法的 C++ 代码,但你可能会收到警告。 - HolyBlackCatmemset()
不是初始化,而是赋值。 - chux - Reinstate Monica