Switch-Anweisung und lokale Variable?



  • Hallo Forum,

    in meinem Lehrbuch steht folgender Abschnitt zur for-Schleife:

    Ulrich Breymann, 'Der C++ Programmierer', Seite 75 schrieb:

    (...) Die Laufvariable i kann auch außerhalb der runden Klammern deklariert werden (...). Der Unterschied besteht darin, dass außerhalb der Klammern deklarierte Laufvariablen noch über die Schleife hinaus gültig sind. (...) Im Fall der Deklaration innerhalb der runden Klammern bleibt die Gültigkeit auf den Schleifenkörper beschränkt: (...) Derselbe Mechanismus gilt für Deklarationen in den runden Klammern von if-, while- und switch-Anweisungen. (...)

    Jetzt fällt es mir bei einer while-Schleife noch relativ leicht, das nachzuvollziehen, weil sie ja nur eine Umformung einer for-Schleife ist. Bei einer if-Abfrage erschließt sich mir der Sinn schon deutlich weniger, und bei einer switch-Anweisung gar nicht mehr.

    Wie sähe ein Beispiel aus, in dem in einer switch-Anweisung eine Variable in den runden Klammern deklariert wird und wozu wäre es gut?



  • //vermutlich Folge eines Designfehlers!
    if(Baum* pBaum=dynamic_cast<Baum*>(pObj))
       baum->stirb();
    
    //Verbrechen am guten Geschmack
    switch(int input=hi*16+lo){
       case 10: newline();
       case 13: carriagereturn();
       default: print(input);
    }
    
    //Habe ich noch nie benutzt
    while(int read=::read(foo,MAXBYTES))
       write(foo,read);
    
    //Bugfix für MSVC6
    #define for if(false);else for
    


  • So weit bin ich natürlich noch lange nicht. Ganz knapp, in einfachen Worten, was macht das zweite Beispiel?



  • dennis.cpp schrieb:

    So weit bin ich natürlich noch lange nicht. Ganz knapp, in einfachen Worten, was macht das zweite Beispiel?

    Ist doch leicht:

    Es berechnet aus den Variablen hi und lo einen neuen Wert input und in Abhängigkeit des Ergebnisses wird zum entsprechenden Ziel gesprungen.

    mfg Martin


Log in to reply