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?
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
.
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.
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.
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
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)