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.
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
1 | if( pointer == NULL ) |
2 | {
|
3 | while( 1 ) |
4 | ;
|
5 | }
|
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.
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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.