【发布时间】:2015-12-13 09:59:20
【问题描述】:
struct ss {
char foo[];
char bar[3];
int bazSize;
char baz[];
}
在上面,foo 显然是一个 4 或 8 字节长的指针。 bar 是一个数组,长度为 3 个字节。 baz 曾经是一个指针,8 字节长。但在 C99 中,baz 是一个灵活的数组。 (传统上定义为baz[0]。)
规则是什么?编译器如何知道 foo 与 baz 完全不同?这怎么不能破坏任何恰好在结构末尾有指针的代码? [] 现在与 * 不同了吗?
【问题讨论】:
-
你的代码不是合法的 C,所以这个问题没有实际意义。
-
该结构在 C 中无效,并且没有编译器允许它。一个未指定长度的数组只能作为结构的最后一个元素。
-
@datenwolf 编译器允许奇怪的事情。我今天看到另一个问题,它接受了
int x; struct foo { int y[x]; int z[x]; int q[x]; } -
@M.M:有没有可能,这是一个在函数中定义的结构,而编译器使用了 C99 标准?在那种情况下,我认为它可能是允许的,但我会先咨询标准以确定。
-
@datenwolf 在 C99 中是不允许的
标签: c