具有灵活数组成员的结构的大小

Size of a struct with flexible array member

本文关键字:结构 组成员 数组      更新时间:2023-10-16

给定

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++ 的行为相似。