如何修复gcc警告:缺少';结构<;匿名>';?

如何修复gcc警告:缺少';结构<;匿名>';?,gcc,gcc-warning,Gcc,Gcc Warning,我有一个包含匿名结构的联合类型定义。当尝试初始化它时,我总是收到GCC4.9.2(-Wall-Wextra-pedantic)关于字段缺少初始值设定项的警告。然而,它似乎像预期的那样工作。下面的变量初始化方式是否有问题 #include <stdio.h> typedef union { unsigned int raw; struct { unsigned short hue; unsigned char saturation; unsigned

我有一个包含匿名结构的联合类型定义。当尝试初始化它时,我总是收到GCC4.9.2(-Wall-Wextra-pedantic)关于字段缺少初始值设定项的警告。然而,它似乎像预期的那样工作。下面的变量初始化方式是否有问题

#include <stdio.h>

typedef union {
  unsigned int raw;
  struct {
    unsigned short hue;
    unsigned char  saturation;
    unsigned char  value;
  };
} HSV;

int main() {
    HSV color = {.hue = 1, .saturation = 2, .value = 4};

    printf("hue: %d, saturation: %d, value: %d, raw: %08X\n", color.hue, color.saturation, color.value, color.raw);
}
#包括
typedef联合{
无符号整数原始;
结构{
无符号短色调;
无符号字符饱和;
无符号字符值;
};
}单纯疱疹病毒;
int main(){
HSV颜色={.hue=1、.saturation=2、.value=4};
printf(“色调:%d,饱和度:%d,值:%d,原始:%08X\n”,color.hue,color.saturation,color.value,color.raw);
}
编译gcc时会给出一些警告

$ gcc -Wall -Wextra -pedantic -std=gnu11 main.c 
main.c: In function 'main':
main.c:13:2: warning: missing initializer for field 'saturation' of 'struct <anonymous>' [-Wmissing-field-initializers]
  HSV color = {.hue =   1, .saturation = 2, .value = 4};
  ^
main.c:7:20: note: 'saturation' declared here
     unsigned char  saturation;
                    ^
main.c:13:2: warning: missing initializer for field 'value' of 'struct <anonymous>' [-Wmissing-field-initializers]
  HSV color = {.hue =   1, .saturation = 2, .value = 4};
  ^
main.c:8:20: note: 'value' declared here
     unsigned char  value;
                    ^
$ ./a.out 
hue: 1, saturation: 2, value: 4, raw: 04020001
$gcc-Wall-Wextra-pedantic-std=gnu11 main.c
main.c:在函数“main”中:
main.c:13:2:警告:“struct”[-Wmissing字段初始值设定项]的字段“饱和”缺少初始值设定项
HSV颜色={.hue=1、.saturation=2、.value=4};
^
main.c:7:20:注:此处声明“饱和”
无符号字符饱和;
^
main.c:13:2:警告:“struct”[-Wmissing字段初始值设定项]的字段“value”缺少初始值设定项
HSV颜色={.hue=1、.saturation=2、.value=4};
^
main.c:8:20:注:此处声明“值”
无符号字符值;
^
美元/年
色调:1,饱和度:2,值:4,原始值:04020001

GCC 5.x中没有警告。您找到解决方案了吗?我看到了完全相同的错误。@PunitSoni:没有。我搬到了gcc 5,那里并没有发生Dúthom提到的情况。看来这是一个gcc错误。。。