Розглянемо наступне switch
твердження:
switch( value )
{
case 1:
return 1;
default:
value++;
// fall-through
case 2:
return value * 2;
}
Цей код компілюється, але чи дійсний він (= визначена поведінка) для C90 / C99? Я ніколи не бачив код, де випадок за замовчуванням - не останній випадок.
EDIT:
Як пишуть Джон Кейдж і KillianDS : це дійсно некрасивий і заплутаний код, і я це добре знаю. Мене просто цікавить загальний синтаксис (він визначений?) Та очікуваний вихід.
goto
не є злим. Прихильники вантажного культу є! Ви не можете собі уявити, до яких крайнощів люди можуть уникнути, goto
оскільки це, мовляв, таке зло, що створює справжній нечитабельний безлад свого коду.
goto
основному для імітації чогось на зразок finally
пункту у функціях, де ресурси (файли, пам'ять) повинні бути випущені під час зупинки та повторювати для кожного випадку помилки перелік free
і close
не допомагає читати. Хоча одне використання goto
цього я хотів би уникнути, але не можу, - це коли я хочу вирватися з циклу, і я перебуваю switch
в цьому циклі.