Instructions étiquetées
Les étiquettes sont utilisées pour transférer le contrôle du programme directement à l'instruction spécifiée.
Syntaxe
labeled-statement
:
identifier
:
statement
case
constant-expression
:
statement
default
:
statement
L’étendue d’une étiquette est la fonction entière dans laquelle elle est déclarée.
Notes
Il existe trois types d'instructions étiquetées. Tous utilisent un signe deux-points (:
) pour séparer un type d’étiquette de l’instruction. Les case
étiquettes et default
les étiquettes sont spécifiques aux instructions 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
}
Étiquettes et instruction goto
L’apparence d’une identifier
étiquette dans le programme source déclare une étiquette. Seule une instruction peut transférer le goto
contrôle vers une identifier
étiquette. Le fragment de code suivant illustre l’utilisation de l’instruction goto
et d’une identifier
étiquette :
Une étiquette ne peut pas apparaître elle-même, mais doit toujours être attachée à une instruction. Si une étiquette doit apparaître seule, placez une instruction null après l'étiquette.
L’étiquette a une étendue de fonction et ne peut pas être déclarée dans la fonction. Toutefois, le même nom peut être utilisé en tant qu'étiquette dans différentes fonctions.
// 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.
Étiquettes dans l’instruction case
Les étiquettes qui apparaissent après le case
mot clé ne peuvent pas également apparaître en dehors d’une switch
instruction. (Cette restriction s’applique également à la default
mot clé.) Le fragment de code suivant montre l’utilisation correcte des case
étiquettes :
// 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;
}
Voir aussi
Vue d’ensemble des instructions C++
Instruction switch
(C++)
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour