给定
struct Foo { uint32_t a; uint32_t b[]; };
什么是
sizeof(Foo)
编译器将忽略灵活数组成员,因为它不存在。
C11-§6.7.2.1(第 18 页)
[...] 在大多数情况下,灵活数组成员被忽略。特别是,“结构的大小就像省略了灵活阵列成员一样”,除了它可能具有比省略所暗示的更多的尾部填充[...]。 AFAIK,灵活数组成员直到 c++14 才成为 C++ 标准的一部分。但是,GNU 支持它作为
[...] 在大多数情况下,灵活数组成员被忽略。特别是,“结构的大小就像省略了灵活阵列成员一样”,除了它可能具有比省略所暗示的更多的尾部填充[...]。
。 C 和 C++ 的行为类似。