雷火电竞-中国电竞赛事及体育赛事平台

歡迎來(lái)到入門教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

淺談C語(yǔ)言編程中的布爾bool數(shù)據(jù)類型

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊:

我們知道在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

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有