马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为什么 C99 新增加的布尔类型叫 _Bool,而不是 bool 或 BOOL?
大家可能会觉着奇怪,为啥这个类型长得跟别人不一样呢?
在 C99 的标准中我也没查到相关的说明,所以下边是我个人的推测。
由于编程中经常会出现要么“yes”要么“no”的判断,所以布尔类型就显得非常重要。但最开始的 ANSI C 标准并没有布尔类型,因此大家就会想方设法地自己发明布尔类型。一般的做法无非就是通过宏,自己定义一个布尔类型:
或者
如果 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;
}
执行后的结果是:
因此,C99 新增加的布尔类型的时候,决定将其命名为内部类型(即下横线开头),这样发生冲突的可能性就很低了(我们不推荐用户使用下横线开头的标识符,还记得吗?)
一定要使用 bool 怎么办?
好,就算小甲鱼你说的有一定的道理,我姑且相信你了!
但我是处女座,我就要使用 bool 来声明布尔类型的变量,你有办法吗?
答案是有嘚!
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;
}
执行后的结果是:
|