C语言的布尔类型(_Bool)

也许很多人都和我一样,不知道现在的C语言已经有了布尔型:从C99标准开始,类型名字为“_Bool”。

在此之前的C语言中,使用整型int来表示真假。在输入时:使用非零值表示真;零值表示假。在输出时:真的结果是1,假的结果是0;(这里我所说的“输入”,意思是:当在一个需要布尔值的地方,也就是其它类型转化为布尔类型时,比如 if 条件判断中的的条件;“输出”的意思是:程序的逻辑表达式返回的结果,也就是布尔类型转化为其他类型时,比如 a==b的返回结果,只有0和1两种可能)。

所以,现在只要你的编译器支持C99(我使用的是Dev C++4.9.9.2),你就可以直接使用布尔型了。另外,C99为了让CC++兼容,增加了一个头文件stdbool.h。里面定义了booltruefalse,让我们可以像C++一样的定义布尔类型。

1. 我们自己定义的“仿布尔型”

在C99标准被支持之前,我们常常自己模仿定义布尔型,方式有很多种,常见的有下面两种:
[cpp] view plaincopyprint?
1. / 第一种方法 /
2. #define TRUE 1
3. #define FALSE 0
4.
5.
6. / 第二种方法 /
7. enumbool{false,true};

2. 使用_Bool

现在,我们可以简单的使用 _Bool 来定义布尔型变量。_Bool类型长度为1,只能取值范围为0或1。将任意非零值赋值给_Bool类型,都会先转换为1,表示。将零值赋值给_Bool类型,结果为0,表示。 下面是一个例子程序。
[cpp] view plaincopyprint?
1. #include
2. #include
3.
4. intmain(){
5. _Bool a = 1;
6. _Bool b = 2;/ 使用非零值,b的值为1 /
7. _Bool c = 0;
8. _Bool d = -1;/ 使用非零值,d的值为1 /
9.
10. printf("a==%d, /n", a);
11. printf("b==%d, /n", b);
12. printf("c==%d, /n", c);
13. printf("d==%d, /n", d);
14.
15. printf("sizeof(_Bool) == %d /n",sizeof(_Bool));
16.
17. system("pause");
18. returnEXIT_SUCCESS;
19. }

运行结果如下:(只有0和1两种取值)
[cpp] view plaincopyprint?
1. a==1,
2. b==1,
3. c==0,
4. d==1,
5. sizeof(_Bool) == 1

3. 使用stdbool.h

在C++中,通过bool来定义布尔变量,通过truefalse对布尔变量进行赋值。C99为了让我们能够写出与C++兼容的代码,添加了一个头文件<stdbool.h>。在gcc中,这个头文件的源码如下:(注,为了清楚,不重要的注释部分已经省略)
[cpp] view plaincopyprint?
1. / Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
2. This file is part of GCC.
3.
/
4.
5. #ifndef _STDBOOL_H
6. #define _STDBOOL_H
7.
8. #ifndef __cplusplus
9.
10. #define bool _Bool
11. #define true 1
12. #define false 0
13.
14. #else / __cplusplus ,应用于C++里,这里不用处理它/
15.
16. / Supporting in C++ is a GCC extension. /
17. #define _Bool bool
18. #define bool bool
19. #define false false
20. #define true true
21.
22. #endif / __cplusplus /
23.
24. / Signal that all the definitions are present. /
25. #define __bool_true_false_are_defined 1
26.
27. #endif / stdbool.h /

可见,stdbool.h中定义了4个宏,bool、true、false、__bool_true_false_are_defined。 其中bool就是 _Bool类型,true和false的值为1和0,__bool_true_false_are_defined的值为1。

下面是一个例子程序
[cpp] view plaincopyprint?
1. #include
2. #include
3. #include
4.
5. / 测试C99新添加的头文件 stdbool.h /
6.
7. intmain(){
8. boolm =true;
9. booln =false;
10. printf("m==%d, n==%d /n", m, n);
11.
12. printf("sizeof(_Bool) == %d /n",sizeof(_Bool));
13.
14. system("pause");
15. returnEXIT_SUCCESS;
16. }

执行结果为:
[cpp] view plaincopyprint?
1. m==1, n==0
2. sizeof(_Bool) == 1

原文链接: https://www.cnblogs.com/wangfengju/p/6173003.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/94454

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午2:37
下一篇 2023年2月10日 上午2:38

相关推荐