Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Значение булевого типа может быть сконвертировано к целочисленному типу, поэтому его можно использовать в качестве управляющей переменной в выражении 'switch'. В этом случае использование конструкции 'if-else' является предпочтительным, так как оно дает более понятное и явное представление намерений программиста.
Пример:
int foo(unsigned a, unsigned b) { while (a != 0 && b != 0) { switch (a > b) // <= { case 0: a -= b; break; default: b -= a; break; } } return a; }
Вместо этого следует написать:
int foo(unsigned a, unsigned b) { while (a != 0 && b != 0) { if (a > b) { b -= a; } else { a -= b; } } return a; }
Данная диагностика классифицируется как:
|