为什么我在 gcc C 中的这个标记联合中收到过量元素警告?

问题描述 投票:0回答:1

我正在用C写一个标记联合,定义如下:

struct uuid_0000000000061d0c {
   long _0;
   union {
      struct {void* _1;};  
      struct {char* _1001; char* _1002;};       
      struct {char* _2001;};
      struct {};
   };
};

一个标记的联合中有四个匿名案例。我的问题是,当我用“大”两个字段的情况初始化它时,我最终收到警告“警告:结构初始值设定项中有多余的元素”。

struct uuid_0000000000061d0c an_instance = { 1, "a", "b" }; 

按照我的直觉,我成功地重构了原始类型定义以避免错误。基本上,将具有最大数量字段的匿名结构移动到联合的开头可以修复此警告。

struct uuid_0000000000061d0c {
   long _0;
   union {
      struct {char* _1001; char* _1002;}; 
      struct {void* _1;};
      struct {char* _2001;};
      struct {};
   };
};

这是警告的错误还是我误解了警告的意图?

c gcc
1个回答
0
投票

由于初始化没有指定使用哪个联合成员,因此它尝试使用第一个。

© www.soinside.com 2019 - 2024. All rights reserved.