【发布时间】:2020-01-15 12:18:51
【问题描述】:
我对 C 中的 sizeof() 输出感到困惑。假设我有:
struct foo {
char a;
char b;
char c;
char d[0];
};
我希望sizeof(struct foo) 为 4。但是,它在使用 gcc 编译后返回 3。此外,在使用严格设置 -pedantic-errors 编译代码时,我得到编译器错误。
谁能帮我理解这种行为?
【问题讨论】:
-
如果您将
0更改为1或更高版本会怎样? -
声明一个包含 0 个元素的数组是无效的 C。它被 GCC(和其他一些实现)作为扩展接受。
-
你能把它标记为 CW 吗?这似乎是一个不错的 C 常见问题解答候选者。
-
我冒昧地在帖子中添加了一些额外的信息,因为现在有人已将此问题添加到 C FAQ。我希望你不要介意 - 这只是意味着你的问题会得到积极的额外关注。
标签: c gcc sizeof c99 flexible-array-member