2011-01-17 3 views
1
static int Simple() { 
    for (int v = 211; v < 661; v++) { 
      return v; 
    } 
} 

«v» в v ++ подчеркнуто, и мой отладчик говорит, что обнаружен недостижимый код.«Обнаружен недостижимый код»

+0

Почему у вас есть код, как это? Он просто возвращает 211. Часто недостижимый код означает, что у вас есть логическая ошибка в вашем коде. –

+0

Я случайно упростил свой вопрос, ошибочно выбив условное условие, которое имеет решающее значение для логики. – user225626

+0

И я все еще изучаю синтаксис варианта C (был незнакомым только до сегодняшнего дня с полными последствиями «возвращения»). – user225626

ответ

2

Компилятор превратит ваш цикл в нечто вроде:

int v = 211; 

loop: 
if (v < 661) 
{ 
    return v; 
} else { 
    v++; 
    goto loop; 
} 
5

Потому что он никогда не достигнет этой части кода. Он вернется на первую итерацию цикла for. Помните, что это порядок исполнения для цикла в C#:

for (init; condition; increment) { 
    body; 
} 
  1. INIT
  2. состояние
  3. тело (если условие истинно)
  4. приращение
+0

Жаль, что я не смог проверить все плакаты, которые ответили на это. – user225626

2

It никогда не сможет выполнить инкремент, потому что вы возвращаете значение v после первого шага через цикл for.

4

Оператор return немедленно выйдет из цикла, и v ++ не получит возможность выполнить.

+0

Я думаю, вы имеете в виду «выход», а не «выполнить»? – Jamie

+0

@Jamie. Вы правы. спасибо за улов. –

2

Вы определяете цикл for, который выполняет итерации более 450 значений, но вы возвращаетесь в первую итерацию цикла (который оставляет тело функции и, следовательно, останавливает выполнение цикла for!). По другим 449 значениям не будет повторяться, так что код недостижим.

2

Потому что v увеличивается после выполнения тела петли. Но это говорит «эй, не повторяй снова, уходи!», Поэтому v никогда не будет увеличиваться.

Смежные вопросы