C99的新关键字_Bool

C99标准定义了一个新的关键字_Bool,提供了布尔类型。以前,C程序员总是使用自己的方法定义布尔类型。

 0表示false,非0表示true

可能使用char类型表示一个布尔类型,也可能使用int类型表示一个布尔类型。

很多函数库都定义了自己的布尔类型和相应的宏,枚举,typedef

     

现在C99C语言原生的布尔类型带来了。


#include<stdbool.h>


这个头文件定义了bool,true,false等宏。

#ifndef__cplusplus

如果不是C++,是纯C,那么,定义宏bool相当于_Bool类型。

#definebool_Bool

#definetrue 1

#definefalse 0


#else/* __cplusplus */

如果是C++,那么定义_Bool类型为bool类型。

/*Supporting <stdbool.h> in C++ is a GCC extension. */

#define_Bool bool

#definebool bool

#definefalse false

#definetrue true


#endif/* __cplusplus */


/*Signal that all the definitions are present. */

#define__bool_true_false_are_defined 1


看看上面这个宏是否==1,如果是,表示上面这些定义可用。


C2008草案中说:

     Anobject declared as type_Boolis large enough to store the values 0 and1.

        也就是说,只规定了_Bool类型的大小是至少能够存放01这两个值。并没有规定具体的大小。这交给编译器自由发挥了。


我用gcc做了一下测试:

printf("sizeof(bool):%d\n",sizeof(bool));

printf("sizeof(char):%d\n",sizeof(char));

printf("sizeof(int):%d\n",sizeof(int));

printf("sizeof(long):%d\n",sizeof(long));


--sizeof(bool):1

--sizeof(char):1

--sizeof(int):4

--sizeof(long):8

看来gcc是用char来实现_Bool类型的。


看看给_Bool类型赋值会怎样:

boolboolean=-11212112;

printf("boolean:%d\n",boolean);


--boolean:1

       看来,gcc编译器对待_Bool类型有自己的转换处理。如果是0赋值给_Bool类型,那么就赋值0。如果是任意其他数据,那么会赋值为1!(只是不知道其他编译器是否如此处理,C2008标准草案没有细说这个部分)


      以前一直用!逻辑非运算符:

if(!flag){

}

     来表示0和非0。现在_Bool类型就只有01这两个值!


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值