当前位置:嗨网首页>书籍在线阅读

14-新的_Bool类型

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

6.3.4 新的 _Bool 类型

在C语言中,一直用 int 类型的变量表示真/假值。C99专门针对这种类型的变量新增了 _Bool 类型。该类型是以英国数学家George Boole的名字命名的,他开发了用代数表示逻辑和解决逻辑问题。在编程中,表示真或假的变量被称为布尔变量(Boolean variable),所以 _Bool 是C语言中布尔变量的类型名。 _Bool 类型的变量只能存储 1 (真)或 0 (假)。如果把其他非零数值赋给 _Bool 类型的变量,该变量会被设置为 1 。这反映了C把所有的非零值都视为真。

程序清单6.9修改了程序清单6.8中的测试条件,把 int 类型的变量 status 替换为 _Bool 类型的变量 input_is_good 。给布尔变量取一个能表示真或假值的变量名是一种常见的做法。

程序清单6.9  boolean.c 程序

// boolean.c -- 使用_Bool类型的变量 variable
#include <stdio.h>
int main(void)
{
     long num;
     long sum = 0L;
     _Bool input_is_good;
     printf("Please enter an integer to be summed ");
     printf("(q to quit): ");
     input_is_good = (scanf("%ld", &num) == 1);
     while (input_is_good)
     {
          sum = sum + num;
          printf("Please enter next integer (q to quit): ");
          input_is_good = (scanf("%ld", &num) == 1);
     }
     printf("Those integers sum to %ld.\n", sum);
     return 0;
}

注意程序中把比较的结果赋值给 _Bool 类型的变量 input_is_good

input_is_good = (scanf("%ld", &num) == 1);

这样做没问题,因为==运算符返回的值不是 1 就是 0 。顺带一提,从优先级方面考虑的话,并不需要用圆括号把 scanf("%ld", &num) == 1 括起来。但是,这样做可以提高代码可读性。还要注意,如何为变量命名才能让 while 循环的测试简单易懂:

while (input_is_good)

C99提供了 stdbool.h 头文件,该头文件让 bool 成为 _Bool 的别名,而且还把 truefalse 分别定义为 10 的符号常量。包含该头文件后,写出的代码可以与C++兼容,因为C++把 booltruefalse 定义为关键字。

如果系统不支持 _Bool 类型,导致无法运行该程序,可以把 _Bool 替换成 int 即可。