有没有办法让 Clang 或 GCC 在将普通整数分配给枚举类型的变量时发出警告?这个问题涉及的是C,而不是C++。
示例:
typedef enum foo_e { A=1, B=2 } foo_t;
foo_t fun() {
foo_t x = A; // this is fine
foo_t y = 2; // should trigger a warning
int z = B; // this is fine
return 1; // should trigger a warning, as the return type is foo_t
}
“经典”英特尔编译器针对这些情况发出警告:警告#188,“枚举类型与另一种类型混合”。这揭示了我们代码中的几个真正的错误。然而,这是一个由志愿者运行的开源项目,我们无法定期使用这个非自由编译器进行测试,也无法将其集成到 CI 管道中。看到这些检查的值(value)后,我想知道是否有办法通过 Clang 或 GCC 获取它们。
最佳答案
检查the GCC warning documentation没有显示符合您要求的选项。
有一些选项可以解决 switch
语句中缺少枚举值的情况(-Wswitch
和 -Wswitch-enum
),以及不同枚举值之间的比较类型(-Wenum-compare
),以及不同枚举类型之间的转换(-Wenum-conversion
)。
编译器开发人员可能认为有关将 int
值分配给枚举类型的左值的警告不会有用,因为它会警告普通所需的分配,例如 i = i+1
中:
for (enum weather i = sunny; i <= rain; i = i+1)
…
其中,i+1
是一个 int
,因为 1
是一个 int
并且 1
的操作数是 +
转换为通用类型,然后将这个 int
分配给 enumweather
i
。
关于c - 将整数分配给枚举时如何收到警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73342454/