Betrachten Sie dieses C-Code, wo foo
ist ein int
:Erklärungen in switch-Anweisung
switch(foo){
case 1: {
int bla = 255;
case 2:
printf("case12 %d\n", bla);
break;
case 3:
printf("case3 %d\n", bla);
}
};
Für verschiedene Werte von foo
der Code die folgende Ausgabe gibt:
case12 255 # foo=1
case12 255 # foo=2
case3 0 # foo=3
Ich habe ein Problem Verständnis . Die Zeile, die bla
deklariert und ihren Wert definiert, sollte nicht ausgeführt werden, wenn . Die switch-Anweisung sollte direkt auf das Label für case 3:
springen. Aber es gibt keine Warnung, also scheint bla
mindestens deklariert worden zu sein. Es könnte uninitialisiert verwendet werden und sein Wert ist nur zufällig 0
, obwohl. Kannst du erklären, was in "Fall 3" passiert und warum dies legaler C-Code ist?
Sie don‘ t brauche das Semikolon nach dem letzten '}'. –
Seltsamerweise akzeptiert GCC den Code im C-Modus (mit einer Warnung), lehnt ihn jedoch im C++ - Modus ab. – HolyBlackCat
Nicht so seltsam: http://stackoverflow.com/questions/92396/why-cant-variables-be-declared-in-a-switch-statement?rq=1 – melpomene