【求助】一个奇怪的共用体问题!!!
各位大神,我遇到了一个奇怪的共用体问题,我自己实在没搞懂原因,望各位大侠指点。
代码如下:
#include <stdio.h>
int main()
{
struct team{
int x;
union {
int i;
char ch;
}data[];
};
struct team temp;
printf("temp size %d.\n",(int)sizeof(temp));
return 0;
}
这段代码能正常编译,结果如下:
i@i:~$ ./a.out
temp size 4.
可是如果我把struct team 结构体中的 x注塑掉,就编译不过去了。
代码如下:
#include <stdio.h>
int main()
{
struct team{
//int x;
union {
int i;
char ch;
}data[];
};
struct team temp;
printf("temp size %d.\n",(int)sizeof(temp));
return 0;
}
结果如下:
i@i:~$ gcc tes.c
tes.c: In function ‘main’:
tes.c:10: error: flexible array member in otherwise empty struct
我的问题如下:
1:共用体 data[] 后面为什么要加一个空的中括号?C语法中数组不是都要指明大小的么?
2;为什么将这个共用体放在结构体中,一定要加另外的变量才能编译成功?
3:这个共用体占用空间的大小?
共用体 struct
[解决办法]
注释掉int x在VS2010里没有错误,只是有警告:
testcsdn.cpp(14): warning C4200: nonstandard extension used : zero-sized array in struct/union
1> Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array
testcsdn.cpp(17): warning C4101: 'temp' : unreferenced local variable
[解决办法]
data[] 这个被VS2010解析成 zero-sized 数组。
也被你的gcc解析成数组,
[解决办法]
http://www.cplusplus.com/search.do?q=zero-sized+array
看这里有没有帮助
[解决办法]
我觉得可以理解为 预留空间。
事实上他是一个指针
[解决办法]
问题主要在“柔性数组”上。