Natknąłem się dzisiaj na kod z przełącznikiem case i byłem nieco zaskoczony, widząc, jak to działało. Kod był:Czy przełącznik sprawy działa tak?
switch (blah)
{
case a:
break;
case b:
break;
case c:
case d:
case e:
{
/* code here */
}
break;
default :
return;
}
Ku mojemu zaskoczeniu w scenariuszu, w którym zmienna była c
, ścieżka wszedł do „kod tutaj” segmentu. Zgadzam się, że nie ma końca na końcu części przełącznika case, ale wyobrażałem sobie, że zamiast tego przejdzie przez default
. Kiedy lądujesz na linii case blah:
, czy nie sprawdza, czy twoja obecna wartość pasuje do konkretnego przypadku , a dopiero później pozwala ci wejść w konkretny segment? W przeciwnym razie, o co chodzi w sprawie?
: -Dziękuję za wyszukaną odpowiedź! Dostaję, jak to działa. Po prostu jest to sprzeczne z tym, co zdrowy rozsądek mi dyktuje. Nadal uważam, że zachowanie jest sprzeczne z intuicją. Do tej pory myślałem, że ta "sprawa (blah)" była czymś w rodzaju czeku, aby zapewnić jeśli twoja zmienna rzeczywiście jest (bla) .. najwyraźniej to nie działa jak C! – Manish
@Manish: Switch jest często implementowany za pomocą "[branch table] (http://en.wikipedia.org/wiki/Branch_table)", co może pomóc w zrozumieniu. Zdrowy rozsądek nie istnieje w programowaniu, BTW. Potrzebujesz "rozsądku programisty" :) –
@Manish Obydwa zachowania są pożądane, można albo mieć domyślny fall-through i jawnie 'break' out, albo domyślny break-out i jawnie' continue' do następnego przypadku, jeśli jest to pożądane. Ze zdroworozsądkowego punktu widzenia to drugie może wydawać się bardziej naturalne, ale z myślą o realizacji, domyślne przejście jest bardziej naturalne, więc zostało wybrane. –