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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für