Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V2655. MISRA. The right operand of a...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2655. MISRA. The right operand of a logical '&&' or '||' operator should not contain persistent side effects.

19 Сен 2025

Диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Правило актуально только для языка C.

Правый операнд логических операций && и || не должен содержать устойчивых побочных эффектов.

Согласно стандарту MISRA C, устойчивым считается побочный эффект, который в конкретной точке выполнения программы может повлиять на её текущее состояние. Например, такими эффектами являются:

Вычисление правого операнда зависит от результата вычисления левого операнда:

  • для оператора || правый операнд будет вычислен, только если левый операнд возвращает false;
  • для оператора && правый операнд будет вычислен, только если левый операнд возвращает true.

Таким образом, если правый операнд содержит побочные эффекты, эти эффекты могут быть не применены.

Рассмотрим пример:

volatile int counter;

void foo(int *ptr)
{
  // ....
  if (ptr != NULL && counter == 1)
  {
    return true;
  }
  // ....
}

Квалификатор volatile указывает компилятору на то, что оптимизировать доступ к этой переменной нельзя, т.к. она может меняться извне, например, из другого потока. Доступ к таким объектам может влиять на состояние выполнения программы, поэтому является устойчивым побочным эффектом.

Исправленный пример:

volatile int counter;

void foo(int *ptr)
{
  // ....
  if (ptr != NULL)
  {
    int tmp = counter;
    if (tmp == 1)
    {
      return true;
    }
  }
  // ....
}

Данная диагностика классифицируется как:

  • MISRA-C-2023-13.5