Biblioteca estándar de C<stdbool.h>
Antes del estándar C99, en C normalmente se usaban tipos enteros (comoint) para representar valores booleanos. Por ejemplo,0representa falso, y un valor distinto de cero (normalmente1) representa verdadero. Aunque este enfoque era viable, carecía de intuición y seguridad de tipos. Para resolver este problema, el estándar C99 introdujo elstdbool.harchivo de encabezado, que define el tipo booleano y las macros relacionadas.
<stdbool.h>es un archivo de encabezado estándar en C que define el tipo booleano y sus constantes asociadas. Hace que el tipo booleano de C (bool) sea más explícito y utilizable, evitando la práctica tradicional de usar enteros (como 0 o 1) para representar valores booleanos.
stdbool.hEl archivo de encabezado define lo siguiente:
bool: tipo booleano, utilizado para declarar variables booleanas.true: macro que representa el valor verdadero, normalmente definida como1。false: macro que representa el valor falso, normalmente definida como0。__bool_true_false_are_defined: una macro utilizada para indicar sitrueyfalseha sido definido.
Estas macros se definen de la siguiente manera:
#define bool _Bool #define true 1 #define false 0 #define __bool_true_false_are_defined 1
bool es un alias del tipo _Bool.
_Bool es un tipo nativo introducido en el estándar C99 que representa un valor booleano. El tipo _Bool solo puede almacenar 0 o 1, por lo que es adecuado para almacenar valores lógicos.
#include <stdbool.h> _Bool is_valid = 1; // 也可以直接使用 _Bool 类型
Para usar el tipo booleano y las macros relacionadas en un programa C, primero se debe incluir el<stdbool.h>archivo de encabezado:
#include <stdbool.h> bool is_raining = true; bool is_sunny = false;
Ejemplo
El siguiente es un ejemplo que utiliza<stdbool.h>un ejemplo sencillo:
Ejemplo
#include <stdbool.h>
int main() {
// declarar variable booleana
bool isReady = true;
bool isFinished = false;
// usar variable booleana
if (isReady) {
printf("The system is ready.\n");
} else {
printf("The system is not ready.\n");
}
if (!isFinished) {
printf("The task is not finished.\n");
}
// valor de la variable booleana
printf("isReady: %d\n", isReady); // imprime 1 (true)
printf("isFinished: %d\n", isFinished); // imprime 0 (false)
return 0;
}
Salida:
The system is ready. The task is not finished. isReady: 1 isFinished: 0
Tipo bool
Definir variables booleanas usando el tipo bool:
Ejemplo
#include <stdbool.h>
int main() {
bool flag = true; // usar el tipo bool
if (flag) {
printf("Flag is true.\n");
} else {
printf("Flag is false.\n");
}
return 0;
}
En el ejemplo anterior, flag es una variable de tipo booleano con valor inicial true. Se comprueba si flag es true y se imprime el mensaje correspondiente.
Macros true y false
true y false son macros predefinidas que corresponden a los valores booleanos 1 y 0, respectivamente, y se pueden usar directamente en condiciones:
Ejemplo
#include <stdbool.h>
int main() {
bool is_logged_in = false;
// cambiar el valor booleano
if (!is_logged_in) {
is_logged_in = true;
printf("User logged in: %s\n", is_logged_in ? "true" : "false");
}
return 0;
}
Uso con sentencias como if y while
El tipo booleano es útil en estructuras de control como if, while, for:
Ejemplo
#include <stdbool.h>
int main() {
bool condition = false;
while (!condition) {
printf("The condition is false.\n");
condition = true; // cambiar la condición a verdadera
}
return 0;
}
Aquí, el bucle while continúa ejecutándose hasta que condition se vuelve true.
Compatibilidad del tipo booleano con enteros
Aunque el tipo bool es un tipo especializado, en la implementación subyacente normalmente depende de un tipo entero (generalmente int). Por lo tanto, true puede considerarse 1 y false 0.
Sin embargo, al programar se debe evitar mezclar valores booleanos con enteros normales, manteniendo la claridad y legibilidad de los tipos.
Ejemplo
#include <stdbool.h>
int main() {
bool is_active = true;
// mala práctica: mezclar valores booleanos con enteros
int status = is_active; // esta línea compila correctamente, pero es mejor evitarla
if (status) {
printf("Status is true.\n");
} else {
printf("Status is false.\n");
}
return 0;
}
Aunque el código anterior se ejecuta correctamente, no se recomienda usarlo porque mezcla valores booleanos y tipos enteros, lo que facilita que el código sea difícil de entender.
Ventajas del tipo booleano
- Legibilidad: usar el
booltipo hace que la intención del programa sea más clara; en comparación con usar elinttipo para representar verdadero o falso, elbooltipo indica claramente que la variable solo se utiliza para representar valores booleanos. - Estandarización:
<stdbool.h>proporciona una forma estándar de manejar valores booleanos, evitando la complejidad de usar macros o tipos enteros para representar booleanos. - Seguridad de tipos: a diferencia del
inttipo, elbooltipo está dedicado a la evaluación lógica, reduciendo problemas de desajuste de tipos.