在二进制消息传递的库中,我有一些类似的结构:
struct __attribute__((__packed__)) Header {
int16_t msg_type;
int16_t msg_size;
char payload[];
};
struct __attribute__((__packed__)) SomeMessage {
static const int value MsgType = 42;
int64_t field1;
int32_t field2;
// ...
};
对于编写消息,我可以创建一个包含两者的打包类型:
struct __attribute__((__packed__)) WriteMessage {
Header hdr;
SomeMessage body;
};
这是有效的 - 类型的大小和所有字段的对齐方式正如我所希望的那样。海湾合作委员会给了我一个警告,但其他工作:
警告:ISO C ++禁止零大小数组'有效负载'[-pedantic]
但为什么会这样呢?实际上,char payload[]
占用了零空间 - 这不是不允许的吗?我是否依赖于未定义的行为,恰好做了一些合理的事情?