Was ist das richtige Äquivalent von “while(true)” in einfachem C?
Lesezeit: 3 Minuten
Da C nicht hat bools, was ist die richtige Variable, die ersetzt werden soll true in einem Algorithmus, der verwendet
do
{
// ...
} while(true);
???
Sollte ein richtiger C-Programmierer tun
do
{
// ...
} while(1);
oder gibt es eine bestimmte Variable, die für “setwas, das nicht Null/NULL ist” ?
mögliches Duplikat von Using boolean values in C
– BJ Myers
6. Juni 2015 um 4:30 Uhr
Modernes C hat Bools (stackoverflow.com/questions/1608318/is-bool-a-native-c-type/…).
– Paul Hankin
6. Juni 2015 um 4:30 Uhr
#include <stdbool.h> — Herzlichen Glückwunsch, Sie haben jetzt bool, true und false 2015 (und übrigens 1999)!
– autistisch
6. Juni 2015 um 6:02 Uhr
Normalerweise sehe ich heute
while(1) {
...
}
Früher war es üblich zu sehen
for(;;) {
...
}
Das bringt alles auf den Punkt.
Einige Compiler geben eine Warnung für Schleifenbedingungsausdrücke aus, die zur Kompilierzeit konstant wahr sind; deswegen lieber for(;;) sowohl in C als auch in C++.
– Clifford
6. Juni 2015 um 6:30 Uhr
for(;;) ist sprachunabhängiger (funktioniert zB auch in Java) und ist meiner Meinung nach intuitiver, ich nenne es das forever.
– Maraka
6. Juni 2015 um 9:25 Uhr
#define EVER ;;, for(EVER) {}
– Korsaka
11. Oktober 2021 um 16:51 Uhr
Keith Thompson
Ihre Frage bezieht sich nicht wirklich auf bool (welche moderne C tut wenn du hast #include <stdbool.h>), ist es ungefähr der beste Weg, eine Endlosschleife zu schreiben.
Gängige Redewendungen sind:
while (1) {
/* ... */
}
und
for (;;) {
/* ... */
}
Letzteres sieht ein wenig obskur aus, ist aber gut definiert. Jeder der drei Ausdrücke in a for Loop-Header kann weggelassen werden; Wenn der zweite Ausdruck, der steuert, wann die Schleife weiter ausgeführt wird, weggelassen wird, ist er standardmäßig wahr.
while (1) ist wahrscheinlich die einfachste Methode — aber einige Compiler warnen möglicherweise vor einer Bedingung, die immer wahr ist. for (;;) vermeidet das wahrscheinlich, da es keinen (expliziten) Ausdruck gibt, vor dem gewarnt werden könnte.
Ich persönlich würde keine verwenden do/while Schleife, weil die Bedingung ganz unten steht.
Es gibt kniffligere Möglichkeiten, eine Endlosschleife zu schreiben (while (1 + 1 == 2) et al, aber keiner von ihnen ist wirklich die Mühe wert.
Entweder while (1) oder for (;;) wird jedem mit einem guten Verständnis von C vollkommen klar sein.
Oder einfacher gesagt typedef enum { false, true } bool;. Oder, noch einfacher, #include <stdbool.h>.
– Keith Thompson
6. Juni 2015 um 4:44 Uhr
@ user3956566 keine Notwendigkeit, solche Antiquitäten zu verewigen
– MM
6. Juni 2015 um 5:02 Uhr
@ user3956566: In C89/C90 können Sie die erste von mir erwähnte Alternative verwenden. Sie können sogar bekommen __STDC_VERSION__ einen der anderen zu wählen.
– Keith Thompson
6. Juni 2015 um 6:08 Uhr
aakansha
C hat stbool.h Header-Datei zu verwenden bool Variablen.
Das funktioniert also
#include <stdio.h>
#include<stdbool.h>
int main(void) {
int i=1;
while(true)
{
if(i==3){
break;
}
printf("%d\n",i);
i++;
}
return 0;
}
Ausgabe
1
2
Hinweis: Modern C99 hat Unterstützung für bool Variablen aber C89/90 hat nicht.
Wenn Sie C89/90 verwenden, können Sie verwenden typedef oder constants wie in einer der Antworten hier erwähnt oder Sie können verwenden enums auch so
mögliches Duplikat von Using boolean values in C
– BJ Myers
6. Juni 2015 um 4:30 Uhr
Modernes C hat Bools (stackoverflow.com/questions/1608318/is-bool-a-native-c-type/…).
– Paul Hankin
6. Juni 2015 um 4:30 Uhr
#include <stdbool.h>
— Herzlichen Glückwunsch, Sie haben jetztbool
,true
undfalse
2015 (und übrigens 1999)!– autistisch
6. Juni 2015 um 6:02 Uhr