﻿# V1065\. Expression can be simplified: check similar operands\.

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

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

```cpp
void Foo(int A, int B, int C)
{
  if (A - A + 1 < C)
    Go(A, B);
}
```

Из\-за опечатки получилось избыточное выражение, которое можно сократить до '1 < C'\. На самом деле, планировалось написать, например, так:

```cpp
void Foo(int A, int B, int C)
{
  if (A - B + 1 < C)
    Go(A, B);
}
```

В других случаях могут быть выявлены выражения, которые, хотя и не содержат ошибку, будет полезно упростить\. Это может сделать выражения более простыми и понятными\. Пример:

```cpp
if ((rec.winDim.left + (rec.winDim.right - rec.winDim.left)) < inset) // <=
{
  rec.winDim.left  = -((rec.winDim.right – rec.winDim.left) - inset);
  rec.winDim.right = inset;
}

if ((rec.winDim.top + (rec.winDim.bottom – rec.winDim.top)) < inset) // <=
{
  rec.winDim.top = -((rec.winDim.bottom – rec.winDim.top) - inset);
  rec.winDim.bottom = inset;
}
```

В обоих условиях выражения могут быть упрощены путем устранения операндов 'rec\.winDim\.left' и 'rec\.winDim\.top' соответственно\. Сокращённый вариант кода:

```cpp
if (rec.winDim.right < inset)
{
  rec.winDim.left  = -((rec.winDim.right – rec.winDim.left) - inset);
  rec.winDim.right = inset;
}

if (rec.winDim.bottom < inset)
{
  rec.winDim.top = -((rec.winDim.bottom – rec.winDim.top) - inset);
  rec.winDim.bottom = inset;
}
```

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