switch / case

 

Während if/else optimal für eine Gabelung in zwei Richtungen ausgelegt ist, realisiert man eine Auswahl aus einer Vielfalt von Möglichkeiten entweder mit einer geschachtelten if/else-Struktur oder besser mit einer switch/case-Kontrollstruktur:

 

Die allgemeine Syntax lautet:

 

switch ( expression ) 

{

  case const1:

    statement;

  break;  

 

  case const2:

    statement;

  break;

 

  case const3:

    statement;

  break; 

 

  ...

  ... 

 

  default:

    statement

}

 

Der Ausdruck in der Klammer nach switch muss von ganzzahligem Typ sein. const1, const2, const3 stehen hier für vom Typ her ganzzahlige und voneinander verschiedene Konstanten. Stimmt der Wert von expression mit einer Konstante hinter dem case-Label überein, so wird statement ausgeführt. Die optionale break-Sprung­an­wie­sung sorgt dafür, dass die switch-Kontrollstruktur verlassen wird. Existiert keine Übereinstimmung mit einer Konstanten nach case, so wird die optionale default-Anweisung ausgeführt.

 

Eine bekannte Anwendung der switch-Kontrollstruktur ist die Auswertung von Nachrichten bei der Win-API-Programmierung. Nachfolgend ein minimales Beispiel:

 

switch (message)

{

  case WM_PAINT:

      hdc = BeginPaint (hwnd, &ps);

        TextOut (hdc, ...);

      EndPaint (hwnd, &ps);

  return 0;

 

  case WM_DESTROY:

      PostQuitMessage (0);

  return 0;

}

 

Der Abbruch erfolgt hier nicht durch break, sondern durch return 0. Die Windows-Nachrichten sind von ganzzahligem Typ.

 

Man kann einer Anweisung auch mehrere case-Labels zuordnen. Nehmen wir z.B. an, dass man sowohl Klein- als auch Großschreibung bei a, b, c ... abfragen will, so kann man case-Labels kombinieren:

 

switch ( expression )

{

  case 'a':

  case 'A':

    statement_a;

  break;

 

  case 'b':

  case 'B':

    statement_b;

  break;

 

  case 'c':

  case 'C':

    statement_c;

  break;

 

  ...

  ...

 

  default:

    statement_def;

}


Übersicht Keywords C++