Данное диагностическое правило основано на руководстве 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)
{
// ....
}
}
Данная диагностика классифицируется как:
|