首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个奇怪的共用体有关问题!

2013-06-25 
【求助】一个奇怪的共用体问题!!!各位大神,我遇到了一个奇怪的共用体问题,我自己实在没搞懂原因,望各位大侠

【求助】一个奇怪的共用体问题!!!
各位大神,我遇到了一个奇怪的共用体问题,我自己实在没搞懂原因,望各位大侠指点。
代码如下:

#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

看这里有没有帮助
[解决办法]
引用:
Quote: 引用:

注释掉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

====
我也觉得很奇怪啊,我把共用体单独拿出来不放在结构体里面它也是会编译报错的。


我觉得可以理解为   预留空间。
事实上他是一个指针
[解决办法]


问题主要在“柔性数组”上。

热点排行