Erreur de saut de cas d'instruction Switch
Lorsque vous travaillez avec des instructions switch, il est possible de rencontrer l'erreur de compilation suivante :
Erreur : passer à l'étiquette du cas.
Cette erreur se produit lorsque vous tentez d'accéder directement à une étiquette de cas sans gérer correctement la portée des variables déclarées.
Considérez le code suivant extrait :
<code class="cpp">#include <iostream> int main() { int choice; std::cin >> choice; switch(choice) { case 1: int i = 0; break; case 2: // error here } }</code>
Dans cet exemple, l'erreur se produit dans le deuxième cas car la variable que j'ai déclarée dans le premier cas est visible dans les cas suivants. Cependant, comme il n'y a pas de bloc explicite entourant le premier cas, je ne serai pas initialisé dans le second cas.
Pour résoudre ce problème, le premier cas doit être enveloppé dans un bloc explicite :
<code class="cpp">switch(choice) { case 1: { int i = 0; break; } case 2: break; }</code>
En déclarant i dans le bloc, sa portée est limitée au premier cas, empêchant son utilisation accidentelle dans le second cas.
Ceci est important car les variables déclarées dans un cas sont toujours accessibles dans les cas suivants. , mais leur initialisation n'aura lieu que si le cas les initialise explicitement. L'emballage des cas dans des blocs explicites garantit une portée et une initialisation appropriées des variables, évitant ainsi l'erreur « passer à l'étiquette du cas ».
Explication supplémentaire :
Les instructions Switch utilisent une table de saut pour déterminer rapidement quel cas exécuter. Lorsqu'un cas est rencontré, le contrôle passe à la cible de saut correspondante, qui contient le code de ce cas. Cependant, si le cas ne déclare pas explicitement ses variables dans un bloc, les variables des cas précédents peuvent rester accessibles, conduisant potentiellement à un comportement inattendu si elles ne sont pas correctement initialisées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!