﻿# V747\. Suspicious expression inside parentheses\. A function name may be missing\.

Анализатор обнаружил подозрительное выражение в скобках\. В круглых скобках через запятую перечислены различные переменные и значение\. При этом не похоже, что оператор запятая ',' использовался для сокращения кода\.

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

```cpp
if (memcmp(a, b, c) < 0 && (x, y, z) < 0)
```

При написании текста программы случайно забыли написать имя функции 'memcmp'\. Тем не менее код успешно компилируется, хотя работает не так, как задумывалось\. В правой части результатом работы двух операторов запятая \([comma operator](https://en.wikipedia.org/wiki/Comma_operator)\) является переменная 'z'\. Именно она сравнивается с нулём\. В итоге, приведённый выше код, эквивалентен следующему:

```cpp
if (memcmp(a, b, c) < 0 && z < 0)
```

Правильный вариант кода:

```cpp
if (memcmp(a, b, c) < 0 && memcmp(x, y, z) < 0)
```

**Примечание\.** Иногда оператор ',' используется для сокращения кода\. Поэтому анализатор далеко не всегда ругается на запятые внутри скобок\. Например, он считает корректным следующий код:

```cpp
if (((std::cin >> A), A) && .....)
```

Мы не рекомендуем писать такие сложные выражения, так как вашим коллегам потом будет тяжело читать такой код\. Но и ошибки здесь явно нет\. Разработчику просто захотелось совместить в одном выражении и получение значения, и его проверку\.

Ещё один аналогичный пример:

```cpp
if (a)
  return (b = foo(), fooo(b), b);
```