Прочитав ссылку из «David Rodríguez - dribeas», я подумал, что было бы полезно обобщить перечисленные там варианты.
Есть два способа сделать это - либо включить сообщения об отсутствующих случаях enumдля всех операторов switch
, затем отключите его для тех, кто вас не интересует, или оставьте значение по умолчанию и принудительно включите ошибки для тех операторов switch
, которые вам действительно нужны.
Вариант 1: Предупреждения для всех, пометьте некоторые как тихие
Сначала добавьте -Wswitch-enum
к вашим флагам компилятора, чтобы все операторы switch
, даже те, которые имеют предложение default
,будут генерироваться предупреждения, если перечисление не обрабатывается.
Затем, для тех операторов switch
, где вы хотите, чтобы дело default
заботилось о вещах и не хотело видеть предупреждения, оберните switch
оператор, подобный следующему:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wswitch-enum"
switch () {
...
}
#pragma GCC diagnostic pop
Это временно отключит флаг -Wswitch-enum
(скрывая предупреждения о пропущенных регистрах перечислений) только для этого оператора.
Вариант 2: Только шarn, если для этого установлен флажок
Поскольку поведение GCC по умолчанию состоит в том, чтобы скрывать предупреждения при наличии предложения default
, флаги компилятора для этой опции изменять не нужно.
Вместо этого для тех операторов switch
, которые включают предложение default
, но вы все еще хотите видеть предупреждения о пропущенных случаях перечисления, оберните switch
следующим образом:
#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-Wswitch-enum"
switch () {
...
}
#pragma GCC diagnostic pop
Это временноактивирует флаг -Wswitch-enum
между строками push
и pop
, в результате чего сообщения о пропущенных случаях перечисления отображаются даже при наличии предложения default
.Вы можете изменить слово warning
на error
, если хотите, чтобы компиляция не удалась в пропущенном случае.