C-Standardbibliothek<stdbool.h>
Vor dem C99-Standard wurden Ganzzahltypen (wie z. B.int)verwendet, um boolesche Werte darzustellen. Zum Beispiel,0steht für false, Werte ungleich null (wie z. B.1) wurden in C häufig verwendet, um true darzustellen. Dieser Ansatz entbehrte zwar der Intuitivität und Typsicherheit. Um dies zu beheben, führte C99stdbool.h-Header-Datei ein, die den booleschen Typ und zugehörige Makros definiert.
<stdbool.h>ist eine Standard-Header-Datei in C, die den booleschen Typ und die zugehörigen Konstanten definiert. Sie macht den C-booleschen Typ (bool) expliziter und nutzbarer, wodurch die traditionelle Praxis vermieden wird, Ganzzahlen (wie 0 oder 1) zur Darstellung boolescher Werte zu verwenden.
stdbool.hDie Header-Datei definiert Folgendes:
bool: Boolescher Typ, verwendet zur Deklaration boolescher Variablen.true:ein Makro, das einen wahren Wert darstellt, normalerweise definiert als1。false:ein Makro, das einen falschen Wert darstellt, normalerweise definiert als0。__bool_true_false_are_defined:ein Makro, das verwendet wird, um anzugeben,trueundfalseob es definiert ist.
Diese Makros sind wie folgt definiert:
#define bool _Bool #define true 1 #define false 0 #define __bool_true_false_are_defined 1
bool ist ein Alias für den Typ _Bool.
_Bool ist ein nativer Typ, der im C99-Standard eingeführt wurde und einen booleschen Wert darstellt. Der Typ _Bool kann nur 0 oder 1 speichern, was ihn zur Speicherung logischer Werte geeignet macht.
#include <stdbool.h> _Bool is_valid = 1; // 也可以直接使用 _Bool 类型
Um den booleschen Typ und die zugehörigen Makros in einem C-Programm zu verwenden, müssen Sie zunächst einbinden<stdbool.h>Header-Datei:
#include <stdbool.h> bool is_raining = true; bool is_sunny = false;
Beispiel
Das Folgende ist ein Beispiel unter Verwendung von<stdbool.h>ein einfaches Beispiel:
Beispiel
#include <stdbool.h>
int main() {
// Boolesche Variable deklarieren
bool isReady = true;
bool isFinished = false;
// Boolesche Variable verwenden
if (isReady) {
printf("Das System ist bereit.\n");
} else {
printf("Das System ist nicht bereit.\n");
}
if (!isFinished) {
printf("Die Aufgabe ist nicht abgeschlossen.\n");
}
// Wert der booleschen Variable
printf("isReady: %d\n", isReady); // Ausgabe 1 (true)
printf("isFinished: %d\n", isFinished); // Ausgabe 0 (false)
return 0;
}
Ausgabeergebnis:
The system is ready. The task is not finished. isReady: 1 isFinished: 0
bool-Typ
Definieren Sie boolesche Variablen mit dem bool-Typ:
Beispiel
#include <stdbool.h>
int main() {
bool flag = true; // bool-Typ verwenden
if (flag) {
printf("Flag ist wahr.\n");
} else {
printf("Flag ist falsch.\n");
}
return 0;
}
Im obigen Beispiel ist flag eine boolesche Variable mit einem Anfangswert von true. Prüfen Sie, ob flag true ist, und geben Sie dann die entsprechende Meldung aus.
true- und false-Makros
true und false sind vordefinierte Makros, die den booleschen Werten 1 bzw. 0 entsprechen, und können direkt in Bedingungen verwendet werden:
Beispiel
#include <stdbool.h>
int main() {
bool is_logged_in = false;
// Booleschen Wert ändern
if (!is_logged_in) {
is_logged_in = true;
printf("User logged in: %s\n", is_logged_in ? "true" : "false");
}
return 0;
}
Wird zusammen mit Anweisungen wie if und while verwendet
Boolesche Typen sind nützlich in Kontrollstrukturen wie if, while und for:
Beispiel
#include <stdbool.h>
int main() {
bool condition = false;
while (!condition) {
printf("The condition is false.\n");
condition = true; // condition auf true setzen
}
return 0;
}
Hier wird die while-Schleife so lange weiter ausgeführt, bis condition true wird.
Kompatibilität zwischen dem booleschen Typ und Ganzzahlen
Obwohl der Typ bool selbst ein eigener Typ ist, stützt er sich auf der darunterliegenden Implementierungsebene typischerweise auf einen Ganzzahltyp (normalerweise int). Daher kann true als 1 betrachtet werden, und false ist 0.
Beim Programmieren sollte man jedoch vermeiden, boolesche Werte mit gewöhnlichen Ganzzahlen zu mischen, und versuchen, Typklarheit und Lesbarkeit zu wahren.
Beispiel
#include <stdbool.h>
int main() {
bool is_active = true;
// Falscher Ansatz: boolesche Werte mit Ganzzahlen mischen
int status = is_active; // Diese Zeile kompiliert einwandfrei, aber es ist am besten, sie zu vermeiden
if (status) {
printf("Status ist wahr.\n");
} else {
printf("Status ist falsch.\n");
}
return 0;
}
Obwohl der obige Code korrekt ausgeführt wird, wird er nicht empfohlen, weil er boolesche Werte und Ganzzahltypen vermischt, was den Code schwer verständlich macht.
Vorteile des booleschen Typs
- Lesbarkeit: Verwenden
boolDer Typ macht die Absicht des Programms klarer, verglichen mit der Verwendung vonintDer Typ repräsentiert wahr oder falsch,boolDer Typ kann eindeutig angeben, dass die Variable nur zur Darstellung eines booleschen Werts dient. - Standardisierung:
<stdbool.h>Er bietet eine standardisierte Möglichkeit, boolesche Werte zu behandeln, und vermeidet die Komplexität, Makros oder Ganzzahltypen zur Darstellung boolescher Werte zu verwenden. - Typsicherheit: mit
intDer Typ ist anders,boolDer Typ wird speziell für logische Entscheidungen verwendet und verringert Probleme durch Typ-Nichtübereinstimmungen.