Variablen in case-Zweigen
-
Code dieser Art hab ich jetzt schon mehrmals gesehen:
switch(whatever) { case 1: int i = 42; //.. break; case 2: //.. break; }Hier beschwert sich aber mein Compiler, da i ja nur initialisiert wird wenn der obere case-Zweig eintritt.
Schreibe ich abercase 1: int i; i = 42; //..wird problemlos compiliert. Offensichtlich wird i also nur angelegt, wenn der case-zweig auch eingetreten ist. Wo ist also der Unterschied zwischen den beiden Schreibweisen ?
Edit: Hab uebrigends gemerkt das ein Codeblock hier in jedem Fall Abhilfe schafft.
-
omg, was hast du für einen Compiler???
die beiden Schreibweisen müssten identsich sein.
benutzt du manchmal bei 1. noch außerhalb i oder so??
-
ESS_CB schrieb:
omg, was hast du für einen Compiler???
die beiden Schreibweisen müssten identsich sein.
benutzt du manchmal bei 1. noch außerhalb i oder so??
Ich dachte auch immer dass die Schreibweisen identisch waeren. "i" wird sonst nirgends benutzt. Compiler.. gcc nehm ich an, ich benutzte Visual Studio 2005 Express.
-
Spendiere dem Ganzen noch ein paar Klammern und die Sache geht in Ordnung:
switch(whatever) { case 1: { int i = 42; //.. } break; case 2: { //.. } break; }
-
Das Problem ist dass du eine Variable initialisiertst, aber über diese initialisierung drüberspringst, nämlich wenn er z.B. zu case 2 springt.
Mach mal alles bis auf den "case 1" Teil weg, dann sollte es gehen.Ist genau das gleiche wie sowas:
// ... if(blubb()) goto x; int i = 123; x: printf("%d\n", i);Das ist auch nicht erlaubt, selber Grund.