Instrucciones con etiqueta
Las etiquetas se usan para transferir el control de programas directamente a la instrucción especificada.
Sintaxis
labeled-statement
:
identifier
:
statement
case
constant-expression
:
statement
default
:
statement
El ámbito de una etiqueta es toda la función donde se declara.
Comentarios
Hay tres tipos de instrucciones con etiquetas. En todas ellas se utiliza el carácter de dos puntos (:
) para distinguir el tipo de etiqueta de la instrucción. Las etiquetas case
y default
son específicas para las instrucciones 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
}
Etiquetas y la instrucción goto
La aparición de una etiqueta identifier
en el programa de origen declara una etiqueta. Solo una instrucción goto
puede transferir el control a una etiqueta identifier
. En el siguiente fragmento de código se muestra el uso de la instrucción goto
y una etiqueta identifier
:
Una etiqueta no puede aparecer por sí misma; debe estar asociada siempre a una instrucción. Si se necesita la propia etiqueta, coloque una instrucción null detrás de la etiqueta.
La etiqueta tiene ámbito de función y no se puede volver a declarar dentro de la función. Sin embargo, se puede utilizar el mismo nombre como una etiqueta en diferentes funciones.
// 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.
Etiquetas en la instrucción case
Las etiquetas que aparecen después de la palabra clave case
no pueden aparecer también fuera de una instrucción switch
. (Esta restricción también se aplica a la palabra clave default
). En el fragmento de código siguiente se muestra el uso correcto de las etiquetas 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;
}
Consulte también
Información general sobre instrucciones de C++
Instrucción switch
(C++)
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de