Данное диагностическое правило основано на руководстве AUTOSAR (AUTomotive Open System ARchitecture) по разработке программного обеспечения.
Использование логических операторов '!', '&&' и '||' с переменными, имеющими отличный от 'bool' тип, не имеет смысла, вряд ли предназначено для этого и может указывать на присутствие ошибки. Возможно, должны были использоваться побитовые операторы ('&', '|' или '~').
Пример кода, на который анализатор выдаст предупреждение:
void Foo(int x, int y, int z) { if ((x + y) && z) { .... } } void Bar(int *x) { if (!x) { .... } }
Примеры правильного кода с точки зрения правила:
void Foo(int x, int y, int z) { if ((x + y) & z) { .... } } void Foo(int x, int y, int z) { if ((x < y) && (y < z)) { .... } } void Bar(int *x) { if (x == NULL) { .... } }
Данная диагностика классифицируется как:
|