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);

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

Согласно Common Weakness Enumeration, потенциальные ошибки, найденные с помощью этой диагностики, классифицируются как CWE-691.


Найденные ошибки

Проверено проектов
336
Собрано ошибок
12 745

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;