Anweisungen mit Bezeichnung

Bezeichnungen werden verwendet, um die Programmsteuerung direkt an die angegebene Anweisung zu übertragen.

Syntax

labeled-statement:
identifier : statement
case constant-expression : statement
default : statement

Der Bereich einer Bezeichnung ist die gesamte Funktion, in der sie deklariert wird.

Hinweise

Es gibt drei Typen von bezeichneten Anweisungen. Alle verwenden einen Doppelpunkt (:), um einen Bestimmten Beschriftungstyp von der Anweisung zu trennen. Die case Bezeichnungen sind default spezifisch für Fallanweisungen.

#include <iostream>
using namespace std;

void test_label(int x) {

    if (x == 1){
        goto label1;
    }
    goto label2;

label1:
    cout << "in label1" << endl;
    return;

label2:
    cout << "in label2" << endl;
    return;
}

int main() {
    test_label(1);  // in label1
    test_label(2);  // in label2
}

Bezeichnungen und die goto Anweisung

Das Aussehen einer identifier Bezeichnung im Quellprogramm deklariert eine Bezeichnung. Nur eine goto Anweisung kann die Steuerung an eine identifier Bezeichnung übertragen. Das folgende Codefragment veranschaulicht die Verwendung der goto Anweisung und einer identifier Bezeichnung:

Eine Bezeichnung kann nicht selbst angezeigt werden, muss aber immer an eine Anweisung angefügt werden. Wenn eine Bezeichnung allein benötigt wird, platzieren Sie nach ihr eine NULL-Anweisung.

Die Bezeichnung weist den Funktionsbereich auf und kann innerhalb der Funktion nicht neu definiert werden. Allerdings kann derselbe Name in verschiedenen Funktionen als Bezeichnung verwendet werden.

// labels_with_goto.cpp
// compile with: /EHsc
#include <iostream>
int main() {
   using namespace std;
   goto Test2;

   cout << "testing" << endl;

   Test2:
      cerr << "At Test2 label." << endl;
}

//Output: At Test2 label.

Bezeichnungen in der case Anweisung

Bezeichnungen, die angezeigt werden, nachdem das case Schlüsselwort nicht auch außerhalb einer switch Anweisung angezeigt werden kann. (Diese Einschränkung gilt auch für das default Schlüsselwort.) Das folgende Codefragment zeigt die richtige Verwendung von case Bezeichnungen:

// Sample Microsoft Windows message processing loop.
switch( msg )
{
   case WM_TIMER:    // Process timer event.
      SetClassWord( hWnd, GCW_HICON, ahIcon[nIcon++] );
      ShowWindow( hWnd, SW_SHOWNA );
      nIcon %= 14;
      Yield();
      break;

   case WM_PAINT:
      memset( &ps, 0x00, sizeof(PAINTSTRUCT) );
      hDC = BeginPaint( hWnd, &ps );
      EndPaint( hWnd, &ps );
      break;

   case WM_CLOSE:
      KillTimer( hWnd, TIMER1 );
      DestroyWindow( hWnd );
      if ( hWnd == hWndMain )
         PostQuitMessage( 0 );  // Quit the application.
      break;

   default:
      // This choice is taken for all messages not specifically
      //  covered by a case statement.
      return DefWindowProc( hWnd, Message, wParam, lParam );
      break;
}

Siehe auch

Übersicht über C++-Anweisungen
switch-Anweisung (C++)