我有一个使用 enum
作为参数的 C 函数,如下例所示:
typedef enum
{
AB,
CD
} A;
void f(A input)
{
// do something
}
int main(void)
{
// do something
f(-10);
// do something
}
如果我可以启用一个警告来分配一个值超出枚举范围的枚举变量?
最佳答案
有一个open bug for it在 GCC 错误数据库中。 GCC 似乎还没有包含这样的功能。有一个名为 -Wc++-compat
的选项会提示 - 在无数其他事情中,关于 any 整数被隐式转换为枚举类型。
一项相关功能刚刚进入了 GCC 存储库。
在 GCC 主干中(但不在 9.2.1 中,它是 Ubuntu 19.10 的编译器),有一个开关 -Wenum-conversion
,它会警告使用不相关的枚举值,但不会警告裸整数;即使用以下代码 it will warn about the latter function call, but not the former. :
typedef enum{ AB, CD } A;
typedef enum{ EF, GH } B;
void f(A input){
(void)input;
}
int main(void){
f(-10);
f(GH);
}
使用-Wenum-conversion
进行编译的诊断将是
<source>: In function 'main':
<source>:18:6: warning: implicit conversion from 'enum <anonymous>' to 'A' [-Wenum-conversion]
18 | f(GH);
| ^~
关于c - 为枚举变量分配一个超出枚举范围的值时是否有警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59880944/