Недоступный код для увеличения цикла?

Я получаю 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 выглядит очень простым.

1

Решение

У вас есть случайная точка с запятой в вашем операторе if:

if (foo == 4);

Напомним, что циклы for имеют следующую структуру:

for (initialisation; condition; increment/decrement)
statement

Исполнение будет продолжено в следующем порядке:

  1. initialisation
  2. condition; если ложь, то конец
  3. statement
  4. increment/decrement
  5. Перейти к шагу 2

Если компилятор предупреждает о increment/decrement будучи недоступным, это означает, что что-то перед тем, как оно вызывает выполнение, всегда пропускает это — в этом случае случайная точка с запятой вызывает break всегда выполнять, выпрыгивая из цикла преждевременно.

9

Другие решения

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++ не достижимо

2

Проблема (то есть непреднамеренная;) уже описана в двух ответах.

Я просто хотел бы добавить, что вы должны взглянуть на настройку параметров компилятора. Многие компиляторы могут обнаружить такой «странно выглядящий» код и предупредить вас. Например:

Предупреждение: «пустое тело в операторе if»

Кроме того, компилятор может быть настроен для обработки всех предупреждений как ошибок.

Другими словами — опции компилятора часто могут помочь вам найти «непреднамеренный код», чтобы избежать потери времени.

Кстати, редактор eclipse может даже выдать предупреждение о подозрительной точке с запятой, как только вы введете такой оператор if.

0
По вопросам рекламы [email protected]