Допустим, у вас есть тип перечисления с более чем 50 элементами для его значения. Были времена, когда я переключал/обрабатывал значение перечисления с таким количеством записей раньше, но только для проверки, скажем, от 2 до 5 записей из этого.
Например, OpenGL привязывает большинство своих перечислений к одному типу перечисления, называемому GLenum
. Эти значения варьируются от GL_VERTEX_SHADER
до GL_STREAM_DRAW
, до GL_TRIANGLES
, до GL_ARRAY_BUFFER
и т. д.
Как вы можете видеть, хотя они связаны с точки зрения более широкой картины, контекст, в котором они будут использоваться, не связан друг с другом.
Я сгенерировал предупреждения на MinGW/GCC в Linux, где каждое предупреждение относится к каждому значению перечисления, указанному в его объявлении типа. Я не уверен, что это происходит на VC++, но я решил, что все равно учту это на всякий случай.
Другими словами, количество сгенерированных предупреждений составляет TotalEnumValues - AmountOfCaseStatements
для каждого значения перечисления, при условии, что не все перечисления были учтены в самом выражении, что может легко привести к более чем 100 предупреждениям компилятора, если ваш тип перечисления содержит не менее 100 записей.
Я часто использовал if/else, чтобы приспособиться к этому, но при проверке значений перечисления для более чем одной одной записи (что, честно говоря, довольно редко, поскольку цель перечислений в целом требует, чтобы условная логика дополняла ее ), я всегда был склонен к использованию switch/case, так как считаю его более эстетичным (даже если он просто компилируется в оператор if/else;))
Итак, можно ли отключить это предупреждение? Если да, то как?