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 Bezeichnungstyp von der Anweisung zu trennen. Die Und default Bezeichnungen case sind 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

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

Eine Bezeichnung kann nicht allein 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 nicht innerhalb der Funktion neu deklariert 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

Beschriftungen, die nach dem case Schlüsselwort (keyword) angezeigt werden, können nicht auch außerhalb einer switch Anweisung angezeigt werden. (Diese Einschränkung gilt auch für die default Schlüsselwort (keyword).) 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++)