我已经在联盟中声明了一个灵活的数组成员,像这样:
#include <stdio.h>
union ut
{
int i;
int a[]; // flexible array member
};
int main(void)
{
union ut s;
return 0;
}
编译器给出一个错误:
source_file.c:8:9: error: flexible array member in union
int a[];
但是,声明的数组大小为零,如下所示:
union ut
{
int i;
int a[0]; // Zero length array
};
而且效果很好。
为什么零长数组可以很好地合并?
最佳答案
不,工会不支持灵活的数组成员,只支持。C11 6.7.2.1第18条
特殊情况下,结构的最后一个元素
命名成员的数组类型可能不完整;这称为
挠性阵列构件。
此外,零长度数组不是有效的c,这是gcc的非标准扩展。之所以这样做是因为编译器gcc被配置为编译“非标准gnu语言”的代码。如果您希望让它为C编程语言编译代码,则需要添加编译器选项-std=c11 -pedantic-errors
。
关于c - union 会支持灵活的数组成员吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46233400/