frage zur if-anweisung mit while

Gast #1690492
Lesenswert?

Genau genommen kann man das aus diesem Codeschnipsel nicht ableiten.

while(1) leitet zwar typischerweise eine Endlosschleife ein; sie kann 
aber durch ein break im Schleifenkörper wieder eine abbrechende Schleife 
werden.

Zeig mal das komplette, von If abhängige Statement bzw. 
Compound-Statement.
Also entweder bis zum folgenden Semikolon oder bis zur nächsten 
äußersten schliessenden geschweiften Klammer.
#1690521
Lesenswert?

Grrrr schrieb:
> while(1) leitet zwar typischerweise eine Endlosschleife ein; sie kann
> aber durch ein break im Schleifenkörper wieder eine abbrechende Schleife
> werden.

Der Schleifenkörper ist aber genau und vollständig dargelegt: er besteht 
aus nichts außer einem abschließenden „;“.  Daraus wird keine 
abbrechende Schleife mehr.
Gast #1690533
Lesenswert?

ahnungsloser schrieb:
> also so siehts aus
>
> if (pointer == NULL) while(1);
Da wird vermutlich ein Totalabsturz durch den Nullpointer abgefangen, 
indem dem Benutzer ein Totalabsturz durch eine Endlosschleife 
vorgegauckelt wird ;-)

Sinnvoll ist sowas nur auf Multitasking/Multithreading-Betriesystemen, 
bei denen ein andere Task/Thread den hängenden abschiessen kann.

Oliver
#1690540
Lesenswert?

ahnungsloser schrieb:
> Grrrr schrieb:
>> Zeig mal das komplette, von If abhängige Statement
>
> danach gehts dann normal weiter. Die {}klammern von while(1) gibt es
> nicht

Irrtum, weder ; noch { } gehören zum while. (Na ja, bei den { } kann man 
streiten)

while, if, for sind Compound Statements.
d.h. sie bestehen aus dem while, if, for und einer davon abhängigen 
Anweisung. In

   while( 1 )
     ;

bildet der ; die Anweisung, eine leere Anweisung.

Will man mehrere Anweisungen innerhalb des abhängigen Teils haben, so 
muss man diese mehreren Anweisungen in { } einschliessen. Diese Klammern 
fungieren dann als Blockbildner, die syntaktisch aus den mehreren 
Anweisungen wieder eine Anweisung, den Block, machen. Auch bei

  while( 1 )
  {
    tu_was;
    tu_noch_was;
  }

steuert das while nur die Ausführung einer Anweisung. Nur ist diese 1 
Anweisung die Sequenz von Anweisungen, die in einem { } zusammengefasst 
wurde.

Aber syntaktisch sieht while so aus

   while( Expression )
     Statement

ohne ';', ohne { }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren