next up previous contents index
Next: Ausdrücke Up: Anweisungen und Ausdrücke Previous: Anweisungen und Ausdrücke

Anweisungen

 

    statement:  
         labeled-statement 
         expression-statement 
         compound-statement 
         selection-statement 
         iteration-statement 
         jump-statement 
         declaration-statement

Hauptunterschied zu C ist das declaration-statement.

Benannte Anweisung (Labeled Statement)

 

    int main()
    { int ende=9999;
      goto ende;
      cout << "hallo\n";
      ende:  cout << "ende " << ende << endl;
    }

  Der Gültigkeitsbereich eines Labels ist die Funktion, in der es definiert ist. Es kann nur in goto-Anweisungen benutzt werden (auch vor seiner Definition). Label-Namen kollidieren nicht mit anderen Bezeichnern.

Ausdrucksanweisung (Expression Statement)

 

    expression-statement: 
        expression ';' |
        ';' .

Wertzuweisung und Funktionsaufruf sind Ausdrucksanweisungen (siehe ``Ausdrücke''). Die leere Anweisung ist nützlich für leere Schleifenrümpfe und Labels am Blockende.

Blöcke (Compound Statements)

   

    compound-statement:
        '{' statement-list '}' | 
        '{' '}'.

Dient dazu, mehrere Anweisungen dort zu verwenden, wo eine Anweisung erlaubt ist. Besitzt eigenen Gültigkeitsbereich.

Auswahlanweisung (Selection Statement)

         

    selection-statement:
       'if' '(' expression ')' statement | 
       'if' '(' expression ')' statement 
            'else' statement | 
       'switch' '(' expression ')' statement .

Die if-Anweisung    

Erlaubt als expression sind:

Die switch-Anweisung  

Erlaubt als expression sind:

Anweisungen im Rumpf dürfen markiert sein mit ein oder mehreren Labeln der Form:   

    case constant-expression:

Alle constant-expressions haben verschiedene ganzahlige Werte. Es darf ein Label geben der Form:

    default:

Es wird angesprungen, wenn keine der anderen Fallmarken zutrifft.

Schleifen (Iteration Statements)

   

    iteration_statement:
        'while' '(' expression ')' statement | 
        'do' statement 'while '(' expression ')' | 
        'for' '(' init-stat ';' 
                  expropt ';' 
                  expropt ')' statement .
    init-stat:
        expression-statement | 
        declaration-statement . 
    expropt : 
        expression |
        .
     

Die while-Schleife   

Erlaubt als expression sind:

Der Test findet statt vor der Ausführung des Rumpfes.

Die do-Schleife  

Erlaubt als expression sind:

Der Test findet statt nach der Ausführung des Rumpfes.

    int zaehler =0;
    char c;
    do { cin >> c;
         zaehler++;
       } while (c != '\n');

Die for-Schleife  

Erlaubt als erste expression sind:

Der Test (erste expression) findet statt vor der Ausführung des Rumpfes. Danach wird die zweite expression ausgewertet.

Die Initialisierungsanweisung kann eine Deklarationsanweisung sein:

   for (int i = 1; i <= MAX; i++)
       ...

Der Gültigkeitsbereich so definierter Objekte ist auf die for-Schleife beschränkt.  

   int main()  // Schreibe "01230"
   { int i = 0;
     for (int i = 0 ; i < 4 ; i ++)
       cout << i << endl;
     cout << i << endl;
   }

Unbedingte Sprünge (Jump Statements)

   

    jump-statement:
        'break' ';' |
        'continue' ';' | 
        'return' expropt ';' |
        'goto' identifier .

Wenn Sprünge einen Gültigkeitsbereich verlassen, werden für   alle dort konstruierten Objekte (deklarierte und temporäre) die Destruktoren aufgerufen.  

Die break-Anweisung  

erlaubt in switch und Schleifen. Verläßt kleinsten umschliessenden switch oder Schleife.

Die continue-Anweisung  

nur erlaubt in Schleifen. Verzweigt zum Ende des Rumpfes der kleinsten umschliessenden Schleife.

Die return-Anweisung  

Rückkehr aus einer Funktion.

return ohne Ausdruck erlaubt in:

 

Sonst ist ein Return-Ausdruck erforderlich. Erreichen des Funktionsendes ohne return ist äquivalent zur Ausführung einer return-Anweisung ohne Ausdruck und daher in Funktionen mit Ergebnistyp verboten.

Die goto-Anweisung    

Unbedingter Sprung zur mit dem angegebenen Label markierten Anweisung. Nur innerhalb einer Funktion.

Deklarations-Anweisung (Declaration Statement)

 

    declaration-statement:
        declaration.

Deklarationen können beliebig im Anweisungsteil plaziert werden. Verdeckt eventuelle Deklarationen gleichen Namens aus äußeren Blöcken für den Rest des Blockes, in der sie steht.  

    int main() // gib "(i,j)=(2,1)" aus
    { int i = 1;
      { int j = i;
        int i = 2;
        cout << "(i,j)=(" << i << "," << j << ")\n";
      }
    }

Im Gegensatz zu C ist es in C++ nicht erlaubt, über eine Deklarationsanweisung mit Initialisierung zu springen, es sei denn sie steht in einem Block, der als Ganzes übersprungen wird:

        ...
        goto lx;     // FEHLER: überspringt Dekl.
        ...
    ly: X a = 0;     // Konstruktion von a
        ...
    lx: goto ly;     // OK: Destruktion von a


next up previous contents index
Next: Ausdrücke Up: Anweisungen und Ausdrücke Previous: Anweisungen und Ausdrücke

Peter Pfahler, 1997