Transferts de contrôle

Vous pouvez utiliser l’instruction goto ou une case étiquette dans une switch instruction pour spécifier un programme qui se branche au-delà d’un initialiseur. Ce code est conforme sauf si la déclaration qui contient l'initialiseur figure dans un bloc se trouvant lui-même dans le bloc dans lequel l'instruction de saut s'exécute.

L'exemple suivant montre une boucle qui déclare et initialise les objets total, ch et i. Il existe également une déclaration erronée goto qui transfère le contrôle au-delà d’un initialiseur.

// transfers_of_control.cpp
// compile with: /W1
// Read input until a nonnumeric character is entered.
int main()
{
   char MyArray[5] = {'2','2','a','c'};
   int i = 0;
   while( 1 )
   {
      int total = 0;

      char ch = MyArray[i++];

      if ( ch >= '0' && ch <= '9' )
      {
         goto Label1;

         int i = ch - '0';
      Label1:
         total += i;   // C4700: transfers past initialization of i.
      } // i would be destroyed here if  goto error were not present
   else
      // Break statement transfers control out of loop,
      //  destroying total and ch.
      break;
   }
}

Dans l’exemple précédent, l’instruction goto tente de transférer le contrôle après l’initialisation de i. Toutefois, si i était déclaré mais non initialisé, le transfert serait conforme.

Les objets total et ch, déclarés dans le bloc qui servent d’instructionde l’instructionwhile, sont détruits lorsque ce bloc est quitté à l’aide de l’instructionbreak.