﻿# V3172\. The 'if/if\-else/for/while/foreach' statement and code block after it are not related\. Inspect the program's logic\.

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

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

```cpp
if (a == 1) DoSmt();
{
  DoSmt2();
}
```

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

Рассмотрим ещё несколько примеров кода, на которые анализатор выдаст срабатывания:

```cpp
if (a == 2) Nop(); else Nop2();
{
  Nop3();
}

if (a == 3) Nop(); 
else Nop2();
{
  Nop3();
}

foreach (var item in query) DoSmt1();
{
  DoSmt2();
}
```

Анализатор не выдаст срабатывание, если строки с оператором и несвязанным с ним блоком кода несмежные:

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

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

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

```cpp
if (a == 3) ;
{
  DoSmt();
}
```