6

给定

struct Foo {
    uint32_t a;
    uint32_t b[];
};

是什么sizeof(Foo)?它是实现定义的还是未定义的行为?C 与 C++ 的答案是否不同?

4

1 回答 1

7

编译器将忽略灵活数组成员,因为它不存在。

C11-§6.7.2.1 (p18)

[...] 在大多数情况下,灵活的数组成员被忽略。特别是,结构的大小就像省略了柔性数组成员一样,只是它可能具有比省略所暗示的更多的尾随填充 [...]。

AFAIK,灵活的数组成员直到 c++14 才成为 C++ 标准的一部分。但是,GNU 支持它作为扩展。C 和 C++ 的行为相似。

于 2017-07-19T14:47:34.360 回答