为什么C99新增加的布尔类型叫_Bool,而不是bool或BOOL?
为什么 C99 新增加的布尔类型叫 _Bool,而不是 bool 或 BOOL?大家可能会觉着奇怪,为啥这个类型长得跟别人不一样呢?
{:9_230:}
在 C99 的标准中我也没查到相关的说明,所以下边是我个人的推测。
由于编程中经常会出现要么“yes”要么“no”的判断,所以布尔类型就显得非常重要。但最开始的 ANSI C 标准并没有布尔类型,因此大家就会想方设法地自己发明布尔类型。一般的做法无非就是通过宏,自己定义一个布尔类型:
#define BOOL int
或者
#define bool int
如果 C99 新增的布尔类型叫 bool 或 BOOL,则很可能跟大家已有的代码发生冲突(即真正的布尔类型被大家自定义的给覆盖了)。我举个例子,正常情况下,_Bool 打印的长度应该是 1,但如果我对它进行宏定义(#define _Bool int),则打印出来的长度就变成了 int 的长度了:
#include <stdio.h>
#define _Bool int
int main()
{
printf("_Bool's length is %d\n", sizeof(_Bool));
return 0;
}
执行后的结果是:
_Bool's length is 4
因此,C99 新增加的布尔类型的时候,决定将其命名为内部类型(即下横线开头),这样发生冲突的可能性就很低了(我们不推荐用户使用下横线开头的标识符,还记得吗?)
一定要使用 bool 怎么办?
好,就算小甲鱼你说的有一定的道理,我姑且相信你了!
但我是处女座,我就要使用 bool 来声明布尔类型的变量,你有办法吗?
{:9_219:}
答案是有嘚!
C99 除了新加入了布尔类型,还加入了一个标准头文件:<stdbool.h>
这个头文件内容比较简单,就定义了四个宏:
#define bool _Bool
#define true 1
#define false 0
#define __bool_true_false_are_defined 1
所以,如果你希望代码中可以使用 bool 来定义布尔类型的变量,导入该头文件即可:
小甲鱼温馨提示:代码看不懂不要紧,因为有些知识咱还没教@_@
#include <stdio.h>
#include <stdbool.h>
#define NUM 99
int main()
{
bool isOdd;
if (NUM % 2)
isOdd = true;
else
isOdd = false;
if (isOdd)
printf("%d是奇数!\n", NUM);
else
printf("%d不是奇数!\n", NUM);
return 0;
}
执行后的结果是:
99是奇数!
说的好有道理,我竟然无言以对 小甲鱼老师,为啥我用CodeBlocks编译_Bool报错?
|error: '_Bool' was not declared in this scope|
冲突,有道理 NIUBI 看不懂 厉害。{:10_254:} 厉害{:5_91:} {:5_92:} 这个说法没毛病{:5_93:} 不错,小甲鱼的猜测很有道理哦! 说的很有道理呀 有道理 居然没彩蛋?小失望 {:10_249:} ture false 之属字母那么多,为什么不干脆用数字 好像有些道理 分析的有道理 {:5_94:} 有道理