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


Benutzer-Avatar
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.

Wenn Sie c89 verwenden:

Erstellen Sie eine boolesche Definition:

typedef int bool;
#define true 1
#define false 0

Oder Konstanten:

/* Boolean constants. */
#define TRUE 1
#define FALSE 0

Dies gibt dem int eine Bedeutung für Sie.

Oder (wie an anderer Stelle hier erwähnt) bei Verwendung von c99:

#include <stdbool.h>

Meine Erfahrung mit Universitäten in letzter Zeit ist, dass Sie c89 verwenden müssen.

http://en.wikipedia.org/wiki/C_data_types#stdbool.h

  • 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

Benutzer-Avatar
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

   typedef enum {false, true } bool;    
   bool b=true;
   int i=1;
   while(b)
   {
        if(i==3){       
        break;
        }
        printf("%d\n",i);
        i++;
    }

Ausgang

1  
2

Sie können dies überprüfen bool in C

Hoffe es hilft dir.

1256750cookie-checkWas ist das richtige Äquivalent von “while(true)” in einfachem C?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy