具有灵活数组成员的结构体的大小是多少? [重复]

问题描述 投票:0回答:1

给定

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

什么是

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

c sizeof flexible-array-member
1个回答
7
投票

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

C11-§6.7.2.1(第 18 页)

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

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

。 C 和 C++ 的行为类似。

© www.soinside.com 2019 - 2024. All rights reserved.