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

V2528. MISRA. The comma operator should not be used.

14 Ноя 2018

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

Не стоит использовать оператор 'запятая', так как он может привести к путанице при чтении кода.

Рассмотрим следующий пример:

int foo(int x, int y) { .... }
foo( ( 0, 3), 12 );

Код может ввести программиста в заблуждение, если ему до прочтения вызова функции неизвестна ее сигнатура. Может показаться, что в функцию передается три аргумента, однако это не так: оператор 'запятая' в выражении '(0, 3)' вычислит левый и правый аргументы, а затем возвращает результат второго. В итоге, вызов функции на самом деле принимает вид:

foo( 3, 12 );

Диагностика выдает предупреждение и для других случаев, таких как например этот:

int myMemCmp(const char *s1, const char *s2, size_t N)
{
  for (; N > 0; ++s1, ++s2, --N) { .... }
}

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

  • MISRA-C-2012-12.3
  • MISRA-C-2023-12.3
  • MISRA-CPP-2008-5.18.1