warning: missing braces around initializer [-Wmissing-braces]

winmenaruto 2014-05-21 01:58:08
const struct range_adjustment_api default_table[] = {
{ ID_1, 100, 0, 200, 1, {0} },
{ ID_2, 8, 0, 15, 1, {0} },
{ ID_3, 1, 1, 0x3FF, 1, {0} },
};

union flag {
struct {
int32_t def_from_driver:1;
int32_t reserved:31;
}bits;
int32_t value;
};

struct p{
enum p_id;
int32_t def;
int32_t min;
int32_t max;
int32_t step;
union flag flag;
};


warning: missing braces around initializer [-Wmissing-braces]
warning: (near initialization for ‘default_table[0].flag.bits’) [-Wmissing-braces]

应该怎么写才对 我不知道怎么消除warning

...全文
1679 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
winmenaruto 2014-05-22
  • 打赏
  • 举报
回复
谁能告诉我一下 ? 基本上是union里头的第一个元素 struct必须初始化 ?这个意思
ri_aje 2014-05-22
  • 打赏
  • 举报
回复
引用 5 楼 winmenaruto 的回复:
谁能告诉我一下 ? 基本上是union里头的第一个元素 struct必须初始化 ?这个意思
struct 在前的时候需要 {{0}},因为 union 的构造要剥去一层 {},所以两层括号能够使得 bits 初始化的时候还剩个 {0}。 int 在前的时候,初始化 union 就是初始化 int,所以只需要一对括号,这样 union 去掉一对 {} 后,还给 int 剩个 0,语法上没有问题。
winmenaruto 2014-05-21
  • 打赏
  • 举报
回复
引用 2 楼 ri_aje 的回复:
或者把 flag 改成这样

union flag {
 int32_t value;
 struct {
  int32_t def_from_driver:1;
  int32_t reserved:31;
 }bits;
};
或者把初始化中所有的 {0} 改成 {{0}}
int在前,{ 0 }就够了因为,0 for int,但是反过来,为什么要双层的{} ??
winmenaruto 2014-05-21
  • 打赏
  • 举报
回复
引用 2 楼 ri_aje 的回复:
或者把 flag 改成这样

union flag {
 int32_t value;
 struct {
  int32_t def_from_driver:1;
  int32_t reserved:31;
 }bits;
};
或者把初始化中所有的 {0} 改成 {{0}}
能解释一下, {{0}}是什么情况吗 ??
ri_aje 2014-05-21
  • 打赏
  • 举报
回复
或者把 flag 改成这样

union flag {
 int32_t value;
 struct {
  int32_t def_from_driver:1;
  int32_t reserved:31;
 }bits;
};
或者把初始化中所有的 {0} 改成 {{0}}
Symfund 2014-05-21
  • 打赏
  • 举报
回复
楼主的大脑对英文视而不见啦!

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧