Я получаю C4702: предупреждение о недоступном коде в цикле for; Странно то, что, разбивая компоненты внутри паренов, предупреждение указывает на инкрементную часть. Вот пример программы, которая демонстрирует эту ошибку:
int main()
{
int foo = 3;
for (int i = 0;
i < 999;
i++) // warning on this line
{
if (foo == 4);
{
break;
}
}
return 0;
}
Я не могу понять, что не так с этой строкой, потому что цикл for выглядит очень простым.
У вас есть случайная точка с запятой в вашем операторе if:
if (foo == 4);
Напомним, что циклы for имеют следующую структуру:
for (initialisation; condition; increment/decrement)
statement
Исполнение будет продолжено в следующем порядке:
initialisation
condition
; если ложь, то конецstatement
increment/decrement
Если компилятор предупреждает о increment/decrement
будучи недоступным, это означает, что что-то перед тем, как оно вызывает выполнение, всегда пропускает это — в этом случае случайная точка с запятой вызывает break
всегда выполнять, выпрыгивая из цикла преждевременно.
for (int i = 0;
i < 999;
i++) // warning on this line
{
if (foo == 4);
{
break;
}
}
Это так же как
for (int i = 0;
i < 999;
)
{
if (foo == 4);
{
break;
}
i++; /* Note the increment here */
}
Так или иначе вы собираетесь break
из-за if(foo == 4);
так i++
не достижимо
Проблема (то есть непреднамеренная;) уже описана в двух ответах.
Я просто хотел бы добавить, что вы должны взглянуть на настройку параметров компилятора. Многие компиляторы могут обнаружить такой «странно выглядящий» код и предупредить вас. Например:
Предупреждение: «пустое тело в операторе if»
Кроме того, компилятор может быть настроен для обработки всех предупреждений как ошибок.
Другими словами — опции компилятора часто могут помочь вам найти «непреднамеренный код», чтобы избежать потери времени.
Кстати, редактор eclipse может даже выдать предупреждение о подозрительной точке с запятой, как только вы введете такой оператор if.