2013-03-04 2 views
1

Вдохновленный от вопросаЭто единственный случай, когда достижимый goto указывает на недостижимый ярлык?

И прежде, чем я задаю этот вопрос, я прочитал:

задача в вопросе

написать программу, которая имеет достижимый оператор Гото, но соответствующий помеченный оператор недостижим - Эрик Липперт

и один выполнимый ответ как

// the 3 lines are not important but declare variable for afterwards use 
    var whateverException=new Exception("whatever exception"); 
    var whateverAction=default(Action); 
    whateverAction=() => whateverAction(); 
try { 
     goto whateverLabel; // (1) the goto is reachable 
    } 
    finally { 
     throw whateverException; // (3) because finally hijacks 
    } 

whateverLabel: // (2) but the label is not really reached 
    whateverAction(); 

Мне интересно, что в одной программе потока, - это единственный случай, когда достижимый goto указывает на недостижимый ярлык? И следующий код также считается приемлемым для этого?

here: 
    int d=0, n=1/d; 
    goto here; 
+0

Вопрос без голосования, ответа или даже комментария в течение четырех часов действительно странный. –

+2

Спецификация C# рассмотрит ваш 'goto here;' * достижимый *, потому что достижимость учитывает значения * констант *. '1/d' не является константой. –

ответ

5

finally -blocked goto Хитрость заключается в том, единственным способом получить достижимые Гото, что цели недостижимой метки.

+0

Спасибо вам большое! Неудивительно, что этот вопрос висел в течение 7 часов! –

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