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 aber

    case 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.


Anmelden zum Antworten