Unterschied zwischen _Bool- und Bool-Typen in C?

Lesezeit: 2 Minuten

Benutzeravatar von pr1m3x
pr1m3x

Kann mir jemand erklären was der Unterschied zw _Bool und bool Datentyp in C?

Zum Beispiel:

 _Bool x = 1;
  bool y = true;

  printf("%d", x);
  printf("%d", y);

  • bool muss auch ein Typdef sein, C hat diesen Typ nicht.

    – ott–

    4. Januar 2012 um 9:11 Uhr

  • Analog zu _Komplex vs. Komplex.

    – Ciro Santilli OurBigBook.com

    17. September 2014 um 10:58 Uhr

Benutzeravatar von Michael Burr
Michael Burr

Diese Datentypen wurden in C99 hinzugefügt. Seit bool war vor C99 nicht reserviert, sie verwenden die _Bool Schlüsselwort (das reserviert war).

bool ist ein Alias ​​für _Bool wenn du einschließt stdbool.h. Grundsätzlich einschließlich der stdbool.h Header ist ein Hinweis darauf, dass Ihr Code mit der Kennung in Ordnung ist bool ‘reserviert’ zu sein, d.h. dass Ihr Code es nicht für seine eigenen Zwecke verwendet (ähnlich für die Identifikatoren true und false).

  • Die langfristige Absicht scheint zu sein, dass der Standard schließlich überarbeitet wird, um bool zu einem Schlüsselwort zu machen. Dies ist Schritt 1, in dem Sie verwenden können, um das bool-Makro zu erhalten, und es Ihnen immer noch erlaubt ist, es für Ihre eigenen schändlichen Zwecke aufzuheben oder neu zu definieren. Schritt 2 besteht darin, sich zu weigern, bool von aufzuheben oder neu zu definieren, um solche Spielereien zu entmutigen. Schritt 3 besteht dann darin, bool zu einem Schlüsselwort zu machen, das genau wie _Bool ist, und _Bool als veraltet zu markieren. Am Ende dieses langen Weges (sagen wir, in ein oder zwei Jahrzehnten) wird Standard-C-Code einen bool-Typ haben, und neue Programmierer werden nicht wissen, dass ihm jemals einer gefehlt hat.

    – Tialamex

    31. August 2012 um 10:54 Uhr


  • Ich verstehe nicht, warum dies zwei Jahrzehnte dauern muss, wenn man bedenkt, dass es eine ziemlich offensichtliche Verbesserung ist. Code, dem diese Änderung nicht gefällt, kann weiterhin mit aktuellen Compilerversionen kompiliert werden.

    – Ricardo Sánchez-Saez

    31. August 2013 um 16:45 Uhr


  • Ich glaube nicht, dass die C-Norm jemals überarbeitet werden wird bool ein Schlüsselwort. Beachten Sie, dass der Typ von Zeichenfolgenliteralen immer noch ist char *und Sie können weiterhin Funktionsdeklarationen ohne Prototyp verwenden.

    – zol

    21. Juni 2015 um 17:57 Uhr

  • @ JL2210 Ja, aber jeder, der kein Sprachanwalt ist, denkt an die Sprache, die standardmäßig akzeptiert wird (dh C11 + welcher Satz von Erweiterungen standardmäßig aktiv ist), wenn er an C11 denkt, und sagt daher: “Sie können nicht verwenden Funktionsdeklarationen ohne Prototypen seit C90” wird die Leute nur noch mehr verwirren, als sie es bereits sind.

    – zol

    3. Januar 2020 um 5:04 Uhr

  • @ JL2210 Ich würde es so ausdrücken: “Nicht prototypisierte Funktionsdeklarationen sind eine veraltete Funktion des ursprünglichen C-Standards von 1989. Sie wurden aus späteren Überarbeitungen des Standards entfernt, werden aber aus Gründen der Abwärtskompatibilität immer noch von modernen Compilern akzeptiert. Nicht Verwenden Sie sie in neuem Code.”

    – zol

    3. Januar 2020 um 5:06 Uhr


Es gibt keinen Unterschied.

bool ist ein Makro, das erweitert wird zu _Bool in stdbool.h.

Und true ist ein Makro, das auf 1 Zoll erweitert wird stdbool.h

1416930cookie-checkUnterschied zwischen _Bool- und Bool-Typen in C?

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

Privacy policy