布尔类型
C99 引入 _Bool 类型和 <stdbool.h> 头文件,提供标准的布尔类型。_Bool 只能存储 0 或 1,任何非零值赋给 _Bool 时变为 1。stdbool.h 定义了 bool、true、false 宏,让代码更接近 C++ 风格。
基本用法
#include <stdbool.h>
bool flag = true; /* 等价于 _Bool flag = 1; */
bool done = false; /* 等价于 _Bool done = 0; */
if (flag) {
printf("Flag is true\n");
}
_Bool 特性
_Bool b;
b = 5; /* b 变为 1 */
b = 0; /* b 变为 0 */
b = 0.5; /* b 变为 1 */
b = NULL; /* b 变为 0 */
printf("%d\n", b); /* 输出 0 或 1 */
与整数对比
/* C89 风格 */
int flag = 1;
if (flag) { /* ... */ }
/* C99 风格 */
bool flag = true;
if (flag) { /* ... */ }
bool 明确表达意图,提高可读性。
函数返回布尔
#include <stdbool.h>
bool is_even(int n)
{
return n % 2 == 0; /* 返回 true 或 false */
}
if (is_even(4)) {
printf("4 is even\n");
}
常见错误
sizeof(bool):
#include <stdbool.h>
printf("%zu\n", sizeof(bool)); /* 通常是 1,但取决于实现 */
printf("%zu\n", sizeof(_Bool)); /* 同上 */
与整数混淆:
bool b = true;
if (b == 1) { /* 合法但冗余 */
}
/* 直接判断 */
if (b) {
}
最佳实践
- 布尔值用
bool、true、false - 函数返回布尔表达明确条件
- 不假设
sizeof(bool) == 1 - 布尔参数提高接口可读性
- 与 C89 代码交互时注意
_Bool是整数类型