2010-04-02 5 views
28

Angenommen, ich habe eine if Anweisung innerhalb einer for Schleife:Funktioniert `break` nur für` for`, `while`,` do-while`, `switch` und für` if` Statements?

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

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

Nun wird die break Anweisung des Compilers führen aus dem for Schleife zu kommen oder wird es nur kommen aus dem Körper von if einmal die Zustand in der if wird zufrieden?

+1

FYI, 'if' ist keine Schleife. –

+1

@CoolGuy noch ist 'switch' –

+0

@ M.M Ich weiß. Das OP hatte "_'if_ loop_" in [der vorherigen Version] (http://stackoverflow.com/revisions/2565659/2) gesagt und ich korrigierte das. –

Antwort

63

Die break Anweisung bricht aus die nächste einschließende Schleife oder Schalter Anweisung.

break bricht nicht aus einer if Aussage, aber die nächste loop oder switch, die die if Anweisung enthält. Der Grund dafür, dass Sie nicht aus einer if-Anweisung ausbrechen, liegt darin, dass sie häufig verwendet wird, um zu entscheiden, ob Sie aus der loop ausbrechen möchten.

Interessanterweise verhielt sich ein Telefon-Schalter falsch, weil das Unternehmen, das C made exactly this bug erfand. Sie wollten aus einer if Erklärung ausbrechen und sie vergaßen, dass es aus der gesamten for Erklärung herausbrechen würde.

+0

danke Herr und das war ein sehr informatives Beispiel. Ich bin jetzt klar darüber. – avi

+2

[Zitat benötigt] :) – erelender

+1

Es war Nachrichten vor 20 Jahren. Eelender, Sie können Google so gut wie ich kann, vielleicht mit Dingen wie Ess-Software Bug Break beginnen. –

16

Es wird aus der for Schleife ausbrechen. Eine Anweisung break wirkt sich nur auf Schleifen aus (do, for, while) und switch Anweisungen (zum Ausbrechen einer case).

Vom C99 standard, Abschnitt 6.8.6.3:

Constraints

Eine break-Anweisung wird nur in oder als Schalterkörper oder Schleifenkörper erscheinen.

Semantics

Eine break-Anweisung beendet die Ausführung des kleinsten umschließenden Schalter oder Wiederholungsanweisung.

+0

Vielen Dank Herr Mark – avi

13

break wird nicht aus einer if-Klausel, sondern der nächsten Schleife oder switch-Klausel ausbrechen. Außerdem wird eine if-Klausel nicht als "Schleife" bezeichnet, da sie ihren Inhalt niemals wiederholt.

+0

Danke Herr Matti. – avi

2

Break-Anweisung wird nur bei Schleifen und Schalterklausel wirksam. In jedem Fall wird es aus der nächsten umschließenden Schleife kommen. Es ist eine gute Übung, eine bedingte Pause zu verwenden, d. H. Eine Pause, die durch eine if-Anweisung eingeschlossen ist. Wenn Sie aus allen Schleifen oder einer Schleife kommen möchten, können Sie die Anweisung goto verwenden. Zum Beispiel:

while(true) { 
    while (some_condition) { 
      if (some_condition) 
       goto label; 
    } 
} 
label: // do something here 
+1

für fast jedes Problem kann ersetzt werden durch brechen und continue-Anweisung. Die goto-Anweisungen neigen dazu, "Sphegetti" -Code zu erstellen – kapil

Verwandte Themen