﻿# V593\. Expression 'A \= B \=\= C' is calculated as 'A \= \(B \=\= C\)'\. Consider inspecting the expression\.

Анализатор обнаружил потенциальную ошибку в выражении, которое, скорее всего, работает не так, как задумывал программист\. Данный тип ошибок чаще всего можно встретить в выражениях, где одновременно проверяется результат работы функции и выполняется присваивание\.

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

```cpp
if (handle = Foo() != -1)
```

Создавая такой код, программист, как правило, хочет выполнить действия в следующем порядке:

if \(\(handle \= Foo\(\)\) \!\= \-1\)

Но приоритет оператора '\!\=' выше, чем приоритет оператора '\='\. Поэтому выражение вычистится так:

if \(handle \= \(Foo\(\) \!\= \-1\)\)

Чтобы исправить ошибку, можно использовать скобки\. Ещё лучше не жадничать на количестве строк кода\. Текст вашей программы станет более читабелен, если написать так:

```cpp
handle = Foo();
if (handle != -1)
```

Рассмотрим, как подобная ошибка может выглядеть на практике:

```cpp
if (hr = AVIFileGetStream(pfileSilence,
           &paviSilence, typeAUDIO, 0) != AVIERR_OK)
{
  ErrMsg("Unable to load silence stream");
  return hr; 
}
```

Проверка в коде, что произошла ошибка, работает корректно и будет выдано сообщение "Unable to load silence stream"\. Беда в том, что переменная 'hr' будет хранить не код ошибки, а значение 1\. Исправленный вариант кода:

```cpp
if ((hr = AVIFileGetStream(pfileSilence,
           &paviSilence, typeAUDIO, 0)) != AVIERR_OK)
{
  ErrMsg("Unable to load silence stream");
  return hr; 
}
```

Анализатор не всегда выдает предупреждения, обнаруживая конструкцию вида "if \(x \= a \=\= b\)"\. Например, анализатор понимает, что данный код безопасен:

```cpp
char *from;
char *to;
bool result;
...
if (result = from == to)
{}
```

Примечание\. Если анализатор все\-таки выдал ложное предупреждение, то есть два способа устранить его:

1\) Добавить дополнительные скобки\. Пример: "if \(x \= \(a \=\= b\)\)"\.

2\) Использовать комментарий для подавления предупреждения\. Пример: "if \(x \= a \=\= b\) //\-V593"\.