使用枚举关闭switch/case语句的编译器警告
Turn off compiler warning for switch/case statements using enums
假设您有一个枚举类型,其值有50多个条目。以前有几次我用这么多条目切换/大小写枚举值,但只是为了检查其中的2到5个条目。
例如,OpenGL将其大多数枚举都固定在一种枚举类型中,称为GLenum
。这些值的范围从GL_VERTEX_SHADER
到GL_STREAM_DRAW
到GL_TRIANGLES
到GL_ARRAY_BUFFER
等。
正如你所看到的,虽然这些在更大的范围内是相关的,但它们的使用环境并不相互关联。
我在Linux中的MinGW/GCC上生成了警告,其中每个警告都说明了其类型声明中列出的每个枚举值。我不确定这是否发生在VC++上,但我想我无论如何都会考虑一下,以防万一。
换句话说,为每个枚举值生成的警告数量是TotalEnumValues - AmountOfCaseStatements
,前提是语句本身中没有考虑所有枚举,如果枚举类型至少包含100个条目,则很容易导致100多个编译器警告。
我经常使用if/else来适应这一点,但当检查枚举值以查找不止一个条目时(老实说,这非常罕见,因为枚举的目的通常需要条件逻辑来补充它),我总是倾向于使用switch/case,因为我觉得它更美观(即使它只是编译成if/elses语句;)
那么,这个警告可以关闭吗?如果是,如何?
添加一个不执行任何操作的default:
案例。编译器会看到你正在"处理"所有的可能性(从而删除警告),但如果你不指定任何操作,它不会改变生成的代码。
澄清:我说的是:
switch(a)
{
case CONSTANT_1:
...
break;
case CONSTANT_2:
...
break;
}
与此:
switch(a)
{
case CONSTANT_1:
...
break;
case CONSTANT_2:
...
break;
default:
}
第二个根本不修改的行为,所以编译器不应该更改生成的代码,但会告诉它你没有忘记其他(im)可能的情况。
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- switch-case语句如何在Arduino/C++中工作
- 一个'case'在简单的'switch'语句中不起作用
- 为什么您可以在 switch 语句中的"默认"下定义变量,而不能在"case"下定义变量
- 使用枚举关闭switch/case语句的编译器警告
- 为什么case语句中的标签应该是常量
- 在case语句中使用{}.为什么?
- 在 switch 语句中使用向量时"Jump to case label"错误。
- 在开关案例语句中,它说"duplicate case value"出现错误。有人知道为什么吗?
- OpenGL: Case语句和顺序中的错误
- c++访问器mutator未读取cin-switch case语句
- 我如何告诉gcc在switch/case语句上警告(或失败)而不中断?
- 不能从switch case语句传递构造函数的参数
- c++变量初始化在SWITCH语句中DEFAULT之后的CASE内
- 如何在c++中循环一次要求输入的switch-case语句?
- switch case语句中的循环
- 在case中切换成员变量为的case语句
- 为什么在switch case语句中只允许有限的类型?
- 可以用case范围切换语句吗?
- Switch case语句如何在内部实现或工作