C99的新关键字_Bool

来源:互联网 发布:汉语标准发音软件 编辑:程序博客网 时间:2024/05/17 05:05

           

                                                                by沈东良/良少http://blog.csdn.net/shendl




               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这两个值!