Gast
#1690481
Hallo, folgenden Code habe ich gesehen: if (pointer == NULL) while(1) heißt für mich wenn die if-Bedindung erfüllt ist, gehe in eine Endlosschleife. Oder sehe ich da was falsch?
|
Anzeige
|
frage zur if-anweisung mit while
Gast
#1690481
Hallo, folgenden Code habe ich gesehen: if (pointer == NULL) while(1) heißt für mich wenn die if-Bedindung erfüllt ist, gehe in eine Endlosschleife. Oder sehe ich da was falsch? ahnungsloser schrieb: > Hallo, > > folgenden Code habe ich gesehen: > > if (pointer == NULL) while(1) > > heißt für mich wenn die if-Bedindung erfüllt ist, gehe in eine > Endlosschleife. Oder sehe ich da was falsch? Das kommt drauf an, ob dahinter noch ein ; kommt oder nicht.
Gast
#1690490
Karl heinz Buchegger schrieb: > Das kommt drauf an, ob dahinter noch ein ; kommt oder nicht. Ja, da ist ein ; also so siehts aus if (pointer == NULL) while(1); 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
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.
Gast
#1690498
Grrrr schrieb: > Zeig mal das komplette, von If abhängige Statement danach gehts dann normal weiter. Die {}klammern von while(1) gibt es nicht 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 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 { } Oliver schrieb: > Sinnvoll ist sowas nur auf Multitasking/Multithreading-Betriesystemen, > bei denen ein andere Task/Thread den hängenden abschiessen kann. Oder um den Watchdog zu triggern. Oder um eine Stelle zu haben, an der man im Debugger einen Breakpoint platzieren kann :-) .. oder weil dem Programmierer für diesen Fall nichts besseres eingefallen ist. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|