Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Popisky slouží k přenosu řízení programu přímo do zadaného příkazu.
Syntaxe
labeled-statement:
identifier:statement
caseconstant-expression:statement
default:statement
Rozsah popisku je celá funkce, ve které je deklarována.
Poznámky
Existují tři typy příkazů s popisky. Všechny používají dvojtečku (:) k oddělení určitého typu popisku z příkazu.
case Popisky default jsou specifické pro příkazy 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
}
Popisky a goto příkaz
Vzhled popisku ve zdrojovém identifier programu deklaruje popisek.
goto Ovládací prvek identifier na popisek může přenést pouze příkaz. Následující fragment kódu znázorňuje použití goto příkazu a popisku identifier :
Popisek se nemůže zobrazit sám o sobě, ale musí být vždy připojen k příkazu. Pokud je potřebný samotný popisek, umístěte za tento popisek příkaz null.
Popisek má obor funkce a nedá se předefinovat v rámci funkce. Stejný název lze však použít jako popisek v jiných funkcích.
// 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.
Popisky v case příkazu
Popisky, které se zobrazí za case klíčovým slovem switch , se také nedají zobrazit mimo příkaz. (Toto omezení platí také pro default klíčové slovo.) Následující fragment kódu ukazuje správné použití popisků case :
// 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;
}