В некотором унаследованном коде у меня много перечислений и огромные случаи переключения. Я хотел бы проверить, что коммутаторы имеют чистые типы перечислений. Пример бессмыслицы:
typedef enum EN
{
EN_0,
EN_1
} EN_T;
typedef enum DK
{
DK_0,
DK_1
} DK_T;
EN_T bar = ...
switch( bar )
{
case EN_0:
...
break;
case DK_1: //<-- mixed type
...
break;
}
Я попытался скомпилировать это с помощью gcc with -Wall -Wextra -pedantic
и не получил никаких предупреждений. Любые идеи о том, как проверить это? Либо как предупреждения компилятора или выделенный тестовый код. Поскольку оба переключателя и перечисления имеют более 100 членов, он должен быть общим для некоторого уровня.
Изменить: Пожалуйста, обратите внимание, что меня не волнует, если это законно c, в соответствии со стандартом C.
Это плохая практика, и компилятор может предупредить о плохой практике или потенциальных ошибках, которые не нарушают стандарт, например, if( a = 1)...
всегда будет правдой, совершенно законным, но может быть ошибкой.
Я могу заставить компилятор предупредить, если переключатель в перечислении не содержит все значения этого перечисления a.s.o.
Предпочтительно, чтобы компилятор мог работать, но если инструмент, подобный lint или подобному, может это сделать, я тоже был бы счастлив.