Ich habe diese Frage genannt, in der einige der Antworten darauf hindeuten, dass bool
ist ein ganzzahliger Typ (IDEs behandeln es auch als Schlüsselwort).
In keiner der Antworten wird jedoch auf die Informationen in cplusplus verwiesen, aus denen hervorgeht, dass bool
ein Makro ist was durch <cstdbool>
hinzugefügt wird (In diesem Fall fügen die Compiler implizit diesen Header hinzu, während sie kompiliert werden, um bool
zu erlauben). Hier ist die g ++ - Version von <stdbool.h>
.
Also was genau ist die bool
? Ein Schlüsselwort oder ein Makro?
bool
ein Makro. Es gibt keinen integrierten Typ oder Schlüsselwort mit dem Namen bool
in C. Daher verwenden typische Implementierungen die Standardbibliothek zu #define
true
und false
zu 1
bzw. 0
. Regeln wie die für die if
-Anweisung werden in Form von "Null" - und "Nicht-Null" -Ausdrücken definiert und basieren daher auf den erweiterten Makrodefinitionen von true
und false
:
[C99: 6.8.4.1/2]:
In beiden Formularen wird die erste Subanweisung ausgeführt, wenn der Ausdruck ungleich 0 vergleicht. In der else-Form wird die zweite Subanweisung ausgeführt, wenn der Ausdruck gleich 0 ist. Wenn die erste Subanweisung über ein Label erreicht wird , die zweite Subanweisung wird nicht ausgeführt.
Aus praktischen Gründen hat C99 den integrierten Zwischentyp _Bool
und Implementierungen dieser Sprache typischerweise #define
bool
bis _Bool
hinzugefügt. Dieser Typ ist folgendermaßen definiert:
[C99: 6.2.5/2]:
Ein als Typ_Bool
deklariertes Objekt ist groß genug, um die Werte 0 und 1 zu speichern.
Dies ermöglicht eine größere Kompatibilität mit C ++ - Programmen, die unter anderem die Deklaration von Funktionen mit dem bool
-Typ beinhalten können; wirklich, aber, #define _Bool int
hätte wahrscheinlich genügt.
bool
sowohl ein eingebauter Typ als auch ein Schlüsselwort. Der von Ihnen angegebene Link besagt nicht, dass bool
ein Makro in C ++ ist. Es sagt:
Der Zweck in C dieses Headers besteht darin, einen Bool-Typ und die wahren und falschen Werte als Makrodefinitionen hinzuzufügen.
In C ++, das diese direkt unterstützt, enthält der Header einfach ein Makro, mit dem überprüft werden kann, ob der Typ unterstützt wird.
Und das ist richtig.
Semantisch (in Bezug auf die "Bedeutung" Ihres Codes), [C++11: 3.9.1/2]
definiert bool
als einen integralen Typ in C ++.
Lexikalisch (in Bezug auf "Aussehen" in Ihrem Code) listet [C++11: 2.12/1]
es als Schlüsselwort auf. Tatsächlich sind alle Tokens, die Teil der Namen von ganzzahligen Typen sind, auch Schlüsselwörter, einschließlich (aber nicht beschränkt auf):
int
unsigned
long
bool
short
signed
Es ist jedoch nie ein Makro in C ++. Stattdessen erhalten Sie ein Makro __bool_true_false_are_defined
, das Sie in mehrsprachigem Code verwenden können, um die Behandlung von bool
zu ändern, je nachdem, ob Sie in C oder C ++ arbeiten. Ich bin mir nicht sicher, ob ich mir ein nützliches Beispiel vorstellen kann, wohlgemerkt.
Also, was genau ist der Bool? Ein Schlüsselwort vom Typ "Integral" oder ein Makro?
In C ++ heißt es Boolesches Literal , es ist ein eingebauter Typ.
§2.14.7
Typen bool , char, char16_t, char32_t, wchar_t und die Ganzzahlarten mit und ohne Vorzeichen werden gemeinsam als ganzzahlige Typen bezeichnet.
§2.14.6
Boolesche Literale
%Vor%Die booleschen Literale sind die Schlüsselwörter false und true . Solche Literale sind Prvalues und haben Typ bool.
§ 3.9.1.6
Werte vom Typ bool sind entweder wahr oder falsch. [Hinweis: Es gibt keine signierten, unsignierten, kurzen oder langen Zeichen bool Arten oder Werte. - Endnote] Werte vom Typ bool nehmen an integrierten Promotions teil (4.5).
In C ++ bool
ist ein eingebauter Datentyp. In C ist dies nicht der Fall. Wenn Sie also bool
in C verwenden, wurde es als typedef oder mit #define
implementiert, und true
und false
müssen mit #define
implementiert sein oder sind Konstanten .
In C gibt es kein Konzept wie Boolesche Variablen, Ja Höhere Programmiersprachen wie Java, C # und andere bieten uns die Möglichkeit, eine boolesche Variable zu deklarieren, die wir für die Kennzeichnung verwenden, um sie entweder wahr oder falsch zu setzen.
Aber Sie können dies mithilfe von Integralen wie in C
implementieren %Vor% In C _Bool
ist ein Typ und bool
, true
und false
sind Makros, die in stdbool.h
ISO C11-Standardzustände (im Abschnitt 6.2.5 Typen )
Ein als Typ _Bool deklariertes Objekt ist groß genug, um die Werte 0 und 1 zu speichern.
stdbool.h
definiert 4 Makros.
bool
, das zu _Bool
erweitert wird
true
, das zu 1
erweitert wird
false
, das zu 0
erweitert wird
__bool_true_false_are_defined
, die auf 1
erweitert wird.