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);
Анализатор не будет выдавать предупреждение на этот код и в ряде других ситуаций.
Данная диагностика классифицируется как: