frage zur if-anweisung mit while

#1690491
Dann wird eine Endlosschleife angefangen, sobald die Prüfung der 
Variablen Pointer auf NULL den Wert true ergibt.

Korrekt.

Vielleicht bereitet dir das weniger Kopfzerbrechen, wenn man das etwas 
besser formatiert
1
  if( pointer == NULL )
2
  {
3
    while( 1 )
4
      ;
5
  }
Gast #1690492
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
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
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
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.