web-dev-qa-db-fra.com

Est-ce que «break» ne fonctionne que pour les instructions «for», «while», «do-while», «switch» et pour «if»?

Supposons que j'ai une instruction if dans une boucle for:

for( ; ; )
{
  if( )
    {
     printf(" inside if");
     break;
    }//if         

  printf("inside for");
}//for

Maintenant, l'instruction break fera-t-elle sortir le compilateur de la boucle for ou sortira-t-elle uniquement du corps de if une fois la condition dans le if devient satisfait?

33
avi

L'instruction break se détache de la boucle englobante la plus proche ou commutateur déclaration.

break ne sort pas d'une instruction if, mais de loop ou switch la plus proche qui contient cette instruction if. La raison de ne pas sortir d'une instruction if est qu'elle est couramment utilisée pour décider si vous souhaitez sortir de la loop.

Fait intéressant, un commutateur téléphonique s'est mal comporté parce que la société qui a inventé C a fait exactement ce bug . Ils voulaient sortir d'une instruction if et ils ont oublié qu'elle sortirait de la totalité de l'instruction for.

79

Il sortira de la boucle for. Une instruction break n'a d'effet que sur les boucles (do, for, while) et switch (pour sortir d'un case).

De la norme C99 , section 6.8.6.3:

Contraintes

Une instruction break ne doit apparaître que dans ou en tant que corps de commutateur ou corps de boucle.

Sémantique

Une instruction break met fin à l'exécution du plus petit commutateur englobant ou instruction d'itération.

19
Mark Byers

break ne sortira pas d'une clause if, mais de la boucle ou de la clause switch la plus proche. De plus, une clause if n'est pas appelée une "boucle" car elle ne répète jamais son contenu.

14
Matti Virkkunen

L'instruction Break ne prend effet que sur les boucles et la clause switch. Dans tous les cas, il sortira de la boucle d'enceinte la plus proche. C'est une bonne pratique d'utiliser une pause conditionnelle, c'est-à-dire une pause entourée d'une instruction if. Si vous voulez sortir de toutes les boucles ou d'une boucle, vous pouvez utiliser l'instruction goto. Par exemple:

while(true) {
     while (some_condition) {
          if (some_condition)
               goto label;
     }
}
label: // do something here
2
The joker

L'instruction Break ne cassera aucune instruction if ou else. si vous utilisez une instruction break, elle provient principalement de la boucle la plus proche (pour loop, while loop, do while loop et switch case)

0
Gaurav Kumar