【发布时间】:2018-02-24 06:45:48
【问题描述】:
我在 union 中声明了一个灵活的数组成员,像这样:
#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[];
但是,声明数组 zero 大小如下:
union ut
{
int i;
int a[0]; // Zero length array
};
而且它运行良好。
为什么零长度数组可以很好地联合?
【问题讨论】:
-
显示你的编译命令。
-
联合或多或少是编译时类型的合并。灵活的数组成员实际上是一个运行时的东西。
-
去掉gnu支持,第二个也会报错。
-
“工作正常”...等等..什么?你的意思是编译?
标签: c c99 unions flexible-array-member