Maison >développement back-end >C++ >Pourquoi l'erreur « Aller à l'étiquette du cas » se produit-elle dans les instructions Switch ?

Pourquoi l'erreur « Aller à l'étiquette du cas » se produit-elle dans les instructions Switch ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-29 04:19:29621parcourir

Why Does

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn