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

Данное диагностическое правило основано на руководстве 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