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

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

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

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

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

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

```cpp
foo( 3, 12 );
```

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

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