在struct中这个`data [0]`声明的目的是什么?
在C,柔性阵列构件的语法如下:在struct中这个`data [0]`声明的目的是什么?
struct s
{
int n;
double d[]; // flexible array member
};
而且,零尺寸数组中C.
非法如果我声明阵列是这样的:
struct s
{
double d[0]; // Zero size array
};
GCC给出警告:
warning: ISO C forbids zero-size array 'd' [-Wpedantic]
所以,我要谈我的主要问题。
我看到下面的代码here。
struct squashfs_xattr_entry {
__le16 type;
__le16 size;
char data[0];
};
在C零大小数组非法。
然后,
- 什么是结构这个
data[0]
声明的目的是什么? -
data[0]
在这里做什么?
在C99之前(1999年发布的C的ISO标准版本)实现灵活数组成员的唯一方法是编译器支持它作为扩展。 GCC通过使用一个固定长度0
来支持它,因此foo buffer[0]
。
C99使它合法,但他们决定规定语法foo buffer[]
而不是保留GCC的[0]
版本。
GCC仍支持buffer[0]
与C99之前编写的代码兼容。
这是海湾合作委员会的文件中解释说:https://gcc.gnu.org/onlinedocs/gcc-4.4.4/gcc/Zero-Length.html(重点煤矿):
零长度数组被允许在GNU C
需要注意的是 “GNU C”(海湾合作委员会实现的C)在ISO C的顶部有它自己的扩展。
是的。 GCC不仅接受'-std = c99',还接受'-std = gnu99'。 – iBug
这个问题需要回答多少次? –
@AnttiHaapala https://www.youtube.com/watch?v=FGBhQbmPwH8;) – Stargateur
@chux特别是GNU GCC和Clang。然而,M $ VC拒绝零长度数组。 – iBug
所以你甚至没有谷歌有多少重复呢?! –