我可以传递给gcc以禁用此警告吗?我知道它的作用,但对我的程序来说无关紧要。
编辑:我只想禁用警告,保持代码不变。 编译以下代码会生成警告:
struct post{
unsigned int isImg : 1;
struct img{
char *name;
char *url;
int likes;
};
unsigned int isTxt : 1;
struct text{
char*text;
int likes;
};
union Data{
struct img Img;
struct text Txt;
} data;
};
我使用的gcc版本是5.4.0
答案 0 :(得分:1)
看着:
struct post{
unsigned int isImg : 1;
struct img
{
char *name;
char *url;
int likes;
};
unsigned int isTxt : 1;
struct text
{
char*text;
int likes;
};
union Data
{
struct img Img;
struct text Txt;
} data;
};
我看到一些问题:
这是非常糟糕的数据声明组织。
建议:
struct img //32bits
{
char *name;
char *url;
int likes;
};
struct text //32bits
{
char *text;
int likes;
};
union Data // 32bits
{
struct img Img;
struct text Text;
};
struct post //5*32bits
{
unsigned int isImg : 1;
struct img image;
unsigned int isTxt : 1;
struct text Text;
union Data data;
};
即使使用上述(没有编译错误/警告),仍然存在位图排序是实现定义的问题,因此如果没有测试,您不知道这些定义的位是MSB还是LSB的位图。