Bibliothèque standard C<stdbool.h>
Avant la norme C99, les types entiers (tels queint)pour représenter des valeurs booléennes. Par exemple,0représente false, les valeurs non nulles (généralement1) étaient couramment utilisées en C pour représenter true. Cette approche, bien que faisable, manquait d'intuitivité et de sécurité de type. Pour y remédier, la norme C99 a introduitstdbool.hfichier d'en-tête, qui définit le type booléen et les macros associées.
<stdbool.h>est un fichier d'en-tête standard en C, qui définit le type booléen et ses constantes associées. Il rend le type booléen C (bool) est devenu plus explicite et utilisable, évitant la pratique traditionnelle consistant à utiliser des entiers (tels que 0 ou 1) pour représenter des valeurs booléennes.
stdbool.hLe fichier d'en-tête définit ce qui suit :
bool: type booléen, utilisé pour déclarer des variables booléennes.true: une macro représentant une valeur vraie, généralement définie comme1。false: une macro représentant une valeur fausse, généralement définie comme0。__bool_true_false_are_defined: une macro utilisée pour indiquertrueetfalseSi elle est définie.
Ces macros sont définies comme suit :
#define bool _Bool #define true 1 #define false 0 #define __bool_true_false_are_defined 1
bool est un alias du type _Bool.
_Bool est un type natif introduit dans la norme C99, représentant une valeur booléenne. Le type _Bool ne peut stocker que 0 ou 1, ce qui le rend adapté au stockage de valeurs logiques.
#include <stdbool.h> _Bool is_valid = 1; // 也可以直接使用 _Bool 类型
Pour utiliser le type booléen et les macros associées dans un programme C, vous devez d'abord inclure<stdbool.h>Fichier d'en-tête :
#include <stdbool.h> bool is_raining = true; bool is_sunny = false;
Exemple
Ce qui suit est un exemple utilisant<stdbool.h>un exemple simple :
Exemple
#include <stdbool.h>
int main() {
// Déclarer une variable booléenne
bool isReady = true;
bool isFinished = false;
// Utiliser une variable booléenne
if (isReady) {
printf("Le système est prêt.\n");
} else {
printf("Le système n'est pas prêt.\n");
}
if (!isFinished) {
printf("La tâche n'est pas terminée.\n");
}
// Valeur de la variable booléenne
printf("isReady: %d\n", isReady); // Sortie 1 (true)
printf("isFinished: %d\n", isFinished); // Sortie 0 (false)
return 0;
}
Résultat de sortie :
The system is ready. The task is not finished. isReady: 1 isFinished: 0
type bool
Définissez des variables booléennes à l'aide du type bool :
Exemple
#include <stdbool.h>
int main() {
bool flag = true; // Utiliser le type bool
if (flag) {
printf("Flag est vrai.\n");
} else {
printf("Flag est faux.\n");
}
return 0;
}
Dans l'exemple ci-dessus, flag est une variable booléenne avec une valeur initiale de true. Vérifiez si flag vaut true, puis affichez le message correspondant.
macros true et false
true et false sont des macros prédéfinies, correspondant respectivement aux valeurs booléennes 1 et 0, et peuvent être utilisées directement dans les expressions conditionnelles :
Exemple
#include <stdbool.h>
int main() {
bool is_logged_in = false;
// Changer la valeur booléenne
if (!is_logged_in) {
is_logged_in = true;
printf("Utilisateur connecté : %s\n", is_logged_in ? "true" : "false");
}
return 0;
}
Utilisé en conjonction avec des instructions telles que if et while
Les types booléens sont utiles dans les structures de contrôle telles que if, while et for :
Exemple
#include <stdbool.h>
int main() {
bool condition = false;
while (!condition) {
printf("La condition est fausse.\n");
condition = true; // Changer condition en true
}
return 0;
}
Ici, la boucle while continuera à s'exécuter jusqu'à ce que condition devienne true.
Compatibilité entre le type booléen et les entiers
Bien que le type bool soit lui-même un type dédié, au niveau de l'implémentation sous-jacente, il repose généralement sur un type entier (généralement int). Par conséquent, true peut être considéré comme 1, et false comme 0.
Cependant, lors de la programmation, vous devriez éviter de mélanger des valeurs booléennes avec des entiers ordinaires, et essayer de maintenir la clarté et la lisibilité des types.
Exemple
#include <stdbool.h>
int main() {
bool is_active = true;
// Mauvaise approche : mélanger des valeurs booléennes avec des entiers
int status = is_active; // Cette ligne se compile correctement, mais il vaut mieux l'éviter
if (status) {
printf("Le statut est vrai.\n");
} else {
printf("Le statut est faux.\n");
}
return 0;
}
Bien que le code ci-dessus s'exécute correctement, il n'est pas recommandé, car il mélange des valeurs booléennes et des types entiers, ce qui rend le code difficile à comprendre.
Avantages du type booléen
- Lisibilité: Utiliser
boolLe type rend l'intention du programme plus claire, par rapport à l'utilisation deintLe type représente vrai ou faux,boolLe type peut clairement indiquer que la variable est uniquement utilisée pour représenter une valeur booléenne. - Normalisation:
<stdbool.h>Il fournit une manière standard de gérer les valeurs booléennes, en évitant la complexité liée à l'utilisation de macros ou de types entiers pour représenter des valeurs booléennes. - Sécurité de type: avec
intLe type est différent,boolLe type est spécifiquement utilisé pour le jugement logique, ce qui réduit les problèmes d'incompatibilité de type.