淺談C語(yǔ)言編程中的布爾bool數(shù)據(jù)類型
我們知道在C++里有專門的bool類型,用來(lái)表示真或假。但是在C語(yǔ)言里沒(méi)有這樣的類型(至少我是一直這么認(rèn)為的),表達(dá)式的值0為假,非0為真。所以條件判斷語(yǔ)句( if(…)、while(…) )非常靈活,甚至一個(gè)指針類型都可以是條件表達(dá)式。
為了使程序更清晰,我們常常會(huì)給出如下的宏定義:
typedef int BOOL; #define TRUE 1 #define FALSE 0
這是最常見(jiàn)的寫法,能被任何C語(yǔ)言編譯器認(rèn)可。
今天我在一段程序里看見(jiàn)這么一行 #include ,這個(gè)陌生的頭文件還以std打頭而且還和bool有關(guān),引起了我的警覺(jué),立刻百度之。得知這是C99標(biāo)準(zhǔn)新增的頭文件,意在引入bool類型,使之和C++兼容。隨后我看了一下這個(gè)頭文件的源代碼,內(nèi)容如下:
/* * ISO C Standard: 7.16 Boolean type and values */ #ifndef _STDBOOL_H #define _STDBOOL_H #ifndef __cplusplus #define bool _Bool #define true 1 #define false 0 #else /* __cplusplus */ /* Supporting in C++ is a GCC extension. */ #define _Bool bool #define bool bool #define false false #define true true #endif /* __cplusplus */ /* Signal that all the definitions are present. */ #define __bool_true_false_are_defined 1 #endif /* stdbool.h */
這個(gè)頭文件很短,而且也很明了,不過(guò)我對(duì)_Bool這個(gè)類型產(chǎn)生的興趣。又一翻百度,發(fā)現(xiàn)這是C99標(biāo)準(zhǔn)引入的新的關(guān)鍵字。對(duì),是關(guān)鍵字,而不是宏定義,也不是typedef。通過(guò)sizeof(_Bool);得知這個(gè)類型占1個(gè)字節(jié),而且無(wú)論給這個(gè)類型的變量賦任何非0整數(shù)值,其值都是1,這也說(shuō)明了他不是其他整數(shù)類型的別名。
好了,其實(shí)說(shuō)白了,C語(yǔ)言不是沒(méi)有布爾類型,只能說(shuō)在C99標(biāo)準(zhǔn)之前沒(méi)有?,F(xiàn)在只要在源文件中包含stdbool.h這個(gè)頭文件,就可以在C語(yǔ)言里像C++那樣使用bool類型了。
所以如果是C99之前的標(biāo)準(zhǔn),需要我們自己定義bool,如
typedef enum {false = 0, true = 1} bool;
那么我們就來(lái)看一下C語(yǔ)言中的相關(guān)定義:
1.FALSE/TRUE與false/true的區(qū)別:
false/true是標(biāo)準(zhǔn)C++語(yǔ)言里新增的關(guān)鍵字,而FALSE/TRUE是通過(guò)#define,這要用途
是解決程序在C與C++中環(huán)境的差異,以下是FALSE/TRUE在windef.h的定義:
#ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif
也就是說(shuō)FALSE/TRUE是int類型,而false/true是bool類型;所以兩者不一樣的,只不過(guò)
我們?cè)谑褂弥袥](méi)有這種感覺(jué),因?yàn)镃++會(huì)幫你做隱式轉(zhuǎn)換。
2.bool的大小與BOOL的區(qū)別:
bool在C++里是占用1字節(jié),而B(niǎo)OOL是int類型,int類型的大小是視具體環(huán)境而定的;所以
來(lái)說(shuō):false/true只占用1個(gè)字節(jié),而TRUE/FALSE視具體環(huán)境而言,以下是BOOL在windef
.h中的定義:typedef int BOOL;
3.NULL與0的區(qū)別:
還是讓我們看一下windef.h中NULL的定義:
#ifndef NULL #ifdef __cplusplus//這個(gè)是指示是用C++來(lái)編譯程序 #define NULL 0 #else #define NULL ((void *)0) #endif #endif
所以說(shuō):它們沒(méi)有區(qū)別,只不過(guò)在C里面會(huì)做一個(gè)強(qiáng)制類型轉(zhuǎn)換。
上一篇:C++編程中的const關(guān)鍵字常見(jiàn)用法總結(jié)
欄 目:C語(yǔ)言
下一篇:C語(yǔ)言中對(duì)于循環(huán)結(jié)構(gòu)優(yōu)化的一些入門級(jí)方法簡(jiǎn)介
本文標(biāo)題:淺談C語(yǔ)言編程中的布爾bool數(shù)據(jù)類型
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/2633.html
您可能感興趣的文章
- 01-10深入Main函數(shù)中的參數(shù)argc,argv的使用詳解
- 01-10如何尋找數(shù)組中的第二大數(shù)
- 01-10C++大數(shù)模板(推薦)
- 01-10淺談C/C++中的static與extern關(guān)鍵字的使用詳解
- 01-10深入C/C++浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式詳解
- 01-10深入探討C語(yǔ)言中局部變量與全局變量在內(nèi)存中的存放位置
- 01-10深入解析C中的數(shù)值與真假
- 01-10淺談內(nèi)聯(lián)函數(shù)與宏定義的區(qū)別詳解
- 01-10探討:程序在內(nèi)存中的分配(常量,局部變量,全局變量,程序代碼)問(wèn)
- 01-10基于linux下C開(kāi)發(fā)中的幾點(diǎn)技術(shù)經(jīng)驗(yàn)總結(jié)


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11Mac OSX 打開(kāi)原生自帶讀寫NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改


