给定
struct Foo {
uint32_t a;
uint32_t b[];
};
是什么sizeof(Foo)
?它是实现定义的还是未定义的行为?C 与 C++ 的答案是否不同?
给定
struct Foo {
uint32_t a;
uint32_t b[];
};
是什么sizeof(Foo)
?它是实现定义的还是未定义的行为?C 与 C++ 的答案是否不同?
编译器将忽略灵活数组成员,因为它不存在。
C11-§6.7.2.1 (p18)
[...] 在大多数情况下,灵活的数组成员被忽略。特别是,结构的大小就像省略了柔性数组成员一样,只是它可能具有比省略所暗示的更多的尾随填充 [...]。
AFAIK,灵活的数组成员直到 c++14 才成为 C++ 标准的一部分。但是,GNU 支持它作为扩展。C 和 C++ 的行为相似。