提问人:Szabolcs 提问时间:8/13/2022 最后编辑:Szabolcs 更新时间:9/5/2022 访问量:591
将整数分配给枚举时如何获得警告?
How to get a warning when assigning integer to enum?
问:
有没有办法让 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 管道中。在看到这些检查的价值后,我想知道是否有办法通过 Clang 或 GCC 获得它们。
答:
2赞
Eric Postpischil
8/13/2022
#1
检查 GCC 警告文档显示没有可以按照您的请求执行的选项。
有用于语句 ( 和) 中缺少枚举值的选项、不同枚举类型的值之间的比较 () 以及不同枚举类型之间的转换 ()。switch
-Wswitch
-Wswitch-enum
-Wenum-compare
-Wenum-conversion
编译器开发人员可能认为,有关将值分配给枚举类型的左值的警告将没有用处,因为它会警告普通的所需赋值,例如:int
i = i+1
for (enum weather i = sunny; i <= rain; i = i+1)
…
其中,是 an 因为是 和 的操作数被转换为公共类型,然后将其分配给 .i+1
int
1
int
+
int
enum weather
i
评论
|
foo_t