【发布时间】:2012-06-10 19:23:28
【问题描述】:
我注意到,当使用 GCC 4.6 编译时,sizeof(Foo) 为 0,sizeof(Bar) 为 1。由于某种原因,将空数组添加到空结构中使其大小为 0。我认为这两个结构的大小必须是相同的。这是怎么回事?
struct Foo
{
char x[];
};
struct Bar {};
【问题讨论】:
-
这很奇怪,
sizeof永远不会是 0... -
@K-ballo:对于像
char x[]这样的灵活数组,sizeof 为 0。 -
@K-ballo 不,它在 C99 以来的标准中。但是具有灵活数组成员的结构必须有多个命名成员。
-
@K-ballo 来自gcc extension docs:灵活数组成员的类型不完整,因此可能无法应用 sizeof 运算符。作为零长度数组的原始实现的一个怪癖,sizeof 的计算结果为零。
-
gcc 4.2 here 报告编译器错误:error: flexible array member in else empty struct,这与扩展文档中的简介一致。