a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

淺談C語言編程中的布爾bool數據類型

2020-01-26 14:49:23
字體:
來源:轉載
供稿:網友

我們知道在C++里有專門的bool類型,用來表示真或假。但是在C語言里沒有這樣的類型(至少我是一直這么認為的),表達式的值0為假,非0為真。所以條件判斷語句( if(…)、while(…) )非常靈活,甚至一個指針類型都可以是條件表達式。
  為了使程序更清晰,我們常常會給出如下的宏定義:

  typedef int BOOL;  #define TRUE 1  #define FALSE 0

  這是最常見的寫法,能被任何C語言編譯器認可。
  今天我在一段程序里看見這么一行 #include ,這個陌生的頭文件還以std打頭而且還和bool有關,引起了我的警覺,立刻百度之。得知這是C99標準新增的頭文件,意在引入bool類型,使之和C++兼容。隨后我看了一下這個頭文件的源代碼,內容如下:

  /*  * 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 */

  這個頭文件很短,而且也很明了,不過我對_Bool這個類型產生的興趣。又一翻百度,發現這是C99標準引入的新的關鍵字。對,是關鍵字,而不是宏定義,也不是typedef。通過sizeof(_Bool);得知這個類型占1個字節,而且無論給這個類型的變量賦任何非0整數值,其值都是1,這也說明了他不是其他整數類型的別名。
  好了,其實說白了,C語言不是沒有布爾類型,只能說在C99標準之前沒有。現在只要在源文件中包含stdbool.h這個頭文件,就可以在C語言里像C++那樣使用bool類型了。
所以如果是C99之前的標準,需要我們自己定義bool,如

typedef enum {false = 0, true = 1} bool;

那么我們就來看一下C語言中的相關定義:
1.FALSE/TRUE與false/true的區別: 
    false/true是標準C++語言里新增的關鍵字,而FALSE/TRUE是通過#define,這要用途
是解決程序在C與C++中環境的差異,以下是FALSE/TRUE在windef.h的定義:

#ifndef  FALSE #define  FALSE  0 #endif #ifndef  TRUE #define  TRUE  1 #endif 

也就是說FALSE/TRUE是int類型,而false/true是bool類型;所以兩者不一樣的,只不過
我們在使用中沒有這種感覺,因為C++會幫你做隱式轉換。
2.bool的大小與BOOL的區別:
bool在C++里是占用1字節,而BOOL是int類型,int類型的大小是視具體環境而定的;所以
來說:false/true只占用1個字節,而TRUE/FALSE視具體環境而言,以下是BOOL在windef
.h中的定義:typedef   int   BOOL;
3.NULL與0的區別: 
    還是讓我們看一下windef.h中NULL的定義:

#ifndef  NULL #ifdef  __cplusplus//這個是指示是用C++來編譯程序 #define  NULL  0 #else #define  NULL  ((void  *)0) #endif #endif 

所以說:它們沒有區別,只不過在C里面會做一個強制類型轉換。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 久久9色 | www.一区二区| 在线中文字幕日韩 | 成人午夜在线观看 | 日本a视频 | 欧美 日韩 在线播放 | 久久99精品久久久久久按摩秒播 | 一区二区三区亚洲视频 | 精品九九九| 国产精品亚洲精品久久 | 国产一级特黄aaa大片 | 中文字幕亚洲欧美精品一区四区 | 亚洲日本国产 | 日韩午夜场 | 亚洲精品一区国产精品 | 成人五月网 | 免费看的毛片 | 日本一区二区三区中文字幕 | 日韩网站在线 | 日本一区二区在线看 | 欧美在线观看黄 | 欧美日韩中文在线观看 | 免费中文字幕 | 国产精品一区二区三区免费 | 天天综合7799精品影视 | 国产精品一区二区不卡 | 嫩草网站在线观看 | 亚洲毛片在线观看 | 亚洲成人av一区二区三区 | 日本在线观看一区 | 亚洲伦理在线观看 | 欧美日本久久 | 日韩精品视频在线 | 国产精品毛片无码 | 欧美大片网站 | 九九福利 | 色狠狠一区 | 午夜精品一区二区三区在线播放 | 亚洲一区免费看 | 欧美日韩最新 | 曰本人一级毛片免费完整视频 |