Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для C. В условиях конструкций 'if' / 'for' / 'while' должны использоваться выражения, имеющие essential Boolean тип.
Стандарт MISRA определяет следующую модель сущностных типов (Essential type model), в которой переменная может иметь тип:
Таким образом, стандарт разрешает следующие виды выражений:
Пример, на который анализатор выдаст предупреждение:
void some_func(int run_it) { if (run_it) { do_something(); } // .... }
Здесь нужно явно проверить, что переменная не равна нулю:
void some_func(int run_it) { if (run_it != 0) { do_something(); } // .... }
Еще один пример:
void func(void *p) { if (!p) return; // .... }
Для устранения нарушения следует явно сравнить указатель с нулевым:
void func(void *p) { if (p == NULL) return; // .... }
Анализатор не выдаст предупреждение на подобный код:
void fun(void) { while (1) { // .... } }
Данная диагностика классифицируется как:
|