Einer meiner Freunde hat eine Frage gestellt, warum gibt es in der Programmiersprache C keinen Boolean
-Datentyp. Ich habe ein wenig gesucht und gelesen. Ich habe einige Fragen und Antworten im Stapelüberlauf und sage das,
Wir können einen bool auf diese Weise benutzen
%Vor% oder verwenden Sie typedef
s.
Aber meine Frage ist: Warum wurde es nicht als Datentyp in C implementiert, selbst nach so vielen Jahren? Es ist nicht sinnvoll, einen Ein-Byte-Datentyp zum Speichern eines booleschen Werts zu implementieren, statt int
oder short
explizit zu verwenden.
Das stimmt nicht mehr. Der eingebaute boolesche Typ, aka _Bool
, ist seit C99 verfügbar. Wenn Sie stdbool.h
einschließen, ist auch dessen Alias bool
für Sie da.
_Bool
ist ein echter nativer Typ, kein Alias von int
. Was die Größe betrifft, gibt der Standard nur an, dass er groß genug ist, um 0
und 1
zu speichern. Aber in der Praxis machen die meisten Compiler ihre Größe 1
:
Dieses Code-Snippet auf ideone gibt beispielsweise 1
:
C99 hat Unterstützung für den booleschen Typ _Bool
hinzugefügt, ist nicht einfach ein typedef und muss nicht die gleiche Größe wie int haben, aus dem Entwurf C99 Standardabschnitt 6.2.5
Typen :
Ein als Typ _Bool deklariertes Objekt ist groß genug, um die Werte 0 und 1 zu speichern.
Wir haben Komfortmakros über den Header stdbool.h
. Das können wir sehen, wenn wir zum Entwurf des C99-Standardabschnitts gehen 7.16
Boolescher Typ und Werte whcih sagt:
Der Header definiert vier Makros.
Das Makro
bool
wird zu _Bool erweitert.
Die restlichen drei Makros sind für die Verwendung in #if-Preprocessing-Direktiven geeignet. Sie sind
wahr
, die auf die Ganzzahlkonstante 1 erweitert wird,
falsch
, die auf die Ganzzahlkonstante 0 und
erweitert wird__ bool_true_false_are_definiert
, die auf die Ganzzahlkonstante 1 erweitert wird.