﻿# V1073\. Check the following code block after the 'if' statement\. Consider checking for typos\.

Анализатор обнаружил возможную ошибку, связанную с тем, что блок кода \('\{ \.\.\.\. \}'\), идущий после конструкции 'if', к ней не относится\.

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

```cpp
if (a == 1) nop();              // <=
{
  nop2();
}
```

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

Рассмотрим другие примеры кода, на которые анализатор выдаст срабатывание:

```cpp
if (a == 2) nop(); else nop2(); // <=
{
  nop3();
}

if (a == 3) nop(); 
else nop2();                    // <=
{
  nop3();
}
```

Стоит отметить, что сам по себе такой паттерн может не являться ошибкой и встречается в коде\. Поэтому анализатор отсеивает случаи, когда конструкция 'if' записана в одну строку, и в ее теле выполняется одна из следующих конструкций: 'return', 'throw', 'goto'\. Например:

```cpp
if (a == 4) return;             // ok
{
  nop();
}

if (a == 5) throw;              // ok
{
  nop();
}

....
label:
....
if (a == 6) goto label;         // ok
{
  nop();
}
```

Также анализатор не выдаст срабатывание, если строки с конструкцией 'if' и несвязанным с ней блоком кода несмежные:

```cpp
if (a == 7) nop();
// this is a block for initializing MyClass fields
{
  ....
}
```

Если вы получили такое срабатывание, и оно ложное, вы можете подсказать об этом анализатору, добавив пустую строку между 'if' и блоком\.

Также диагностика не выдаст срабатывание в том случае, когда тело 'if' содержит пустую конструкцию \(';'\), за это отвечает диагностическое правило [V529](https://pvs-studio.ru/ru/docs/warnings/v529/)\.