小甲鱼 发表于 2015-12-11 16:44:45

为什么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是奇数!

1b1n1m 发表于 2016-4-1 21:37:35

说的好有道理,我竟然无言以对

kukri 发表于 2016-4-7 22:30:29

小甲鱼老师,为啥我用CodeBlocks编译_Bool报错?
|error: '_Bool' was not declared in this scope|

生活便利贴 发表于 2016-4-19 21:26:46

冲突,有道理

change123456n 发表于 2016-5-30 03:26:20

NIUBI

小菜鸟222 发表于 2016-8-6 14:01:38

看不懂

w_qhai 发表于 2016-8-7 05:06:27

厉害。{:10_254:}

chopsticks 发表于 2016-8-29 22:29:28

厉害{:5_91:}

微凉 发表于 2016-10-11 13:34:34

{:5_92:}

微凉 发表于 2016-10-11 13:40:18

这个说法没毛病{:5_93:}

webth 发表于 2016-12-1 10:10:31

不错,小甲鱼的猜测很有道理哦!

跑腿魔神 发表于 2016-12-8 16:17:38

说的很有道理呀

一轮江月明 发表于 2017-4-1 17:58:05

有道理

HongY 发表于 2017-5-21 14:09:43

居然没彩蛋?小失望

战火 发表于 2017-7-3 12:02:15

{:10_249:}

xjy99 发表于 2017-7-17 09:01:42

ture false 之属字母那么多,为什么不干脆用数字

z578067809 发表于 2017-9-22 14:55:16

好像有些道理

烟火的执著 发表于 2017-10-7 04:42:55

分析的有道理

山楂树 发表于 2017-10-9 21:05:12

{:5_94:}

jmchang1011 发表于 2017-10-22 16:20:33

有道理
页: [1] 2 3 4 5 6
查看完整版本: 为什么C99新增加的布尔类型叫_Bool,而不是bool或BOOL?