C99的新關鍵字_Bool


           

                                                                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這兩個值!






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM