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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.