Maison >développement back-end >C++ >Pourquoi l'erreur « Aller à l'étiquette du cas » se produit-elle dans les instructions Switch ?
Erreur de saut à l'étiquette de cas dans les instructions Switch
Lorsque vous rencontrez l'erreur de compilation « Jump to case label », il faut examiner attentivement l'instruction switch. structure. Cette erreur se produit lorsqu'on tente de déclarer des variables dans un cas qui s'étendent aux cas suivants sans utiliser de délimiteur de bloc explicite, indiqué par des accolades ({ }).
Par exemple, considérons le code suivant :
<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 relying on the existence of i } }</code>
Dans cet exemple, le problème vient de la déclaration de i dans le cas 1. Bien que i soit visible dans le cas 2, il ne sera pas initialisé. En effet, le code d'initialisation est spécifique à chaque cas. Par conséquent, si le choix est 2, l'utilisation de i dans le code suivant pourrait conduire à des résultats inattendus.
Pour remédier à ce problème, utilisez un bloc explicite pour chaque cas :
<code class="cpp">switch(choice) { case 1: { int i=0; break; } case 2: { // Use of i only within this block } }</code>
Alternativement, on peut utiliser une instruction goto, analogue à l'instruction switch :
<code class="cpp">int main() { if(rand() % 2) // Toss a coin goto end; int i = 42; end: // Similar scope and initialization issues as with switch, but with goto std::cout << i; }</code>
Essentiellement, un bloc explicite ou une utilisation prudente de goto garantit que les déclarations de variables et l'initialisation sont localisées dans les cas prévus, évitant ainsi un comportement erroné.
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!