Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le etichette vengono usate per trasferire il controllo del programma direttamente all'istruzione specificata.
Sintassi
labeled-statement
:
identifier
:
statement
case
constant-expression
:
statement
default
:
statement
L'ambito di un'etichetta è l'intera funzione in cui viene dichiarata.
Osservazioni:
Esistono tre tipi di istruzioni etichettate. Tutti usano due punti (:
) per separare un tipo di etichetta dall'istruzione . Le case
etichette e default
sono specifiche delle istruzioni case.
#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
}
Etichette e istruzione goto
L'aspetto di un'etichetta identifier
nel programma di origine dichiara un'etichetta. Solo un'istruzione goto
può trasferire il controllo a un'etichetta identifier
. Il frammento di codice seguente illustra l'uso dell'istruzione goto
e di un'etichetta identifier
:
Un'etichetta non può essere visualizzata da sola, ma deve essere sempre associata a un'istruzione. Se è necessario che un'etichetta appaia da sola, inserire un'istruzione null dopo di essa.
L'etichetta ha un ambito di funzione e non può essere dichiarata nuovamente all'interno della funzione. Tuttavia, lo stesso nome può essere utilizzato come etichetta in funzioni differenti.
// 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.
Etichette nell'istruzione case
Le etichette visualizzate dopo la case
parola chiave non possono essere visualizzate anche all'esterno di un'istruzione switch
. Questa restrizione si applica anche alla default
parola chiave . Il frammento di codice seguente mostra l'uso corretto delle case
etichette:
// 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;
}