# V3007. Odd semicolon ';' after 'if/for/while' operator.

Анализатор обнаружил потенциальную ошибку, связанную с тем, что после одного из операторов 'for', 'while' или 'if' стоит точка с запятой ';'.

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

    int i = 0;
    ....
    for(i = 0; i < arr.Count(); ++i);
      arr[i] = i;

В данном коде программист хотел выполнить присваивание для всех элементов массива, но по ошибке поставил ';' после закрывающей скобки цикла. Таким образом, операция присваивания выполнится только один раз. К тому же произойдёт выход за границу массива.

Корректный вариант кода:

    int i = 0;
    ....
    for(i = 0; i < arr.Count(); ++i)
      arr[i] = i;

Конечно, наличие точки с запятой ';' после данных операторов не всегда является ошибкой, и иногда для выполнения необходимых операций не требуется тела цикла. В таком случае наличие точки с запятой оправдано. Пример такого кода:

    int i;
    for (i = 0; !char.IsWhiteSpace(str[i]); ++i) ;
    Console.WriteLine(i);

Анализатор не будет выдавать предупреждение на этот код и в ряде других ситуаций.

Данная диагностика классифицируется как:

CWE-691