最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2015年11月17日 17:27:51   作者:wind19  
這篇文章主要介紹了C語言編程中的布爾bool數據類型,bool并不是需要通過C++才能使用的,需要的朋友可以參考下

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

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

那么我們就來看一下C語言中的相關定義:
1.FALSE/TRUE與false/true的區(qū)別: 
    false/true是標準C++語言里新增的關鍵字,而FALSE/TRUE是通過#define,這要用途
是解決程序在C與C++中環(huán)境的差異,以下是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的區(qū)別:
bool在C++里是占用1字節(jié),而BOOL是int類型,int類型的大小是視具體環(huán)境而定的;所以
來說:false/true只占用1個字節(jié),而TRUE/FALSE視具體環(huán)境而言,以下是BOOL在windef
.h中的定義:typedef   int   BOOL;
3.NULL與0的區(qū)別: 
    還是讓我們看一下windef.h中NULL的定義:

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

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

相關文章

  • C++實現LeetCode(201.數字范圍位相與)

    C++實現LeetCode(201.數字范圍位相與)

    這篇文章主要介紹了C++實現LeetCode(201.數字范圍位相與),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • C++中調用復制(拷貝)函數的三種情況總結

    C++中調用復制(拷貝)函數的三種情況總結

    這篇文章主要介紹了C++中調用復制(拷貝)函數的三種情況總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言文件操作函數freopen詳細解析

    C語言文件操作函數freopen詳細解析

    替換一個流,或者說重新分配文件指針,實現重定向。如果stream流已經打開,則先關閉該流。如果該流已經定向,則freopen將會清除該定向。此函數一般用于將一個指定的文件打開一個預定義的流:標準輸入、標準輸出或者標準出錯
    2013-10-10
  • C數據結構循環(huán)鏈表實現約瑟夫環(huán)

    C數據結構循環(huán)鏈表實現約瑟夫環(huán)

    這篇文章主要介紹了C數據結構循環(huán)鏈表實現約瑟夫環(huán)的相關資料,需要的朋友可以參考下
    2017-05-05
  • opencv3.0識別并提取圖形中的矩形的方法

    opencv3.0識別并提取圖形中的矩形的方法

    這篇文章主要介紹了opencv3.0識別并提取圖形中的矩形的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 解析C++函數的默認參數和占位參數及較之C語言的拓展

    解析C++函數的默認參數和占位參數及較之C語言的拓展

    這篇文章主要介紹了C++中的默認參數和占位參數及較之C語言的拓展,需要的朋友可以參考下
    2016-03-03
  • C/C++淺析鄰接表拓撲排序算法的實現

    C/C++淺析鄰接表拓撲排序算法的實現

    這篇文章主要介紹了C/C++對于鄰接表拓撲排序算法的實現,鄰接表是圖的一種鏈式存儲方法,其數據結構包括兩部分:節(jié)點和鄰接點
    2022-07-07
  • 基于C語言實現學生管理系統(tǒng)

    基于C語言實現學生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了基于C語言實現學生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 關于背包問題的一些理解和應用

    關于背包問題的一些理解和應用

    這篇文章主要介紹了關于背包問題的一些理解和應用,本文可以說是背包問題九講的補充、讀后感,需要的朋友可以參考下
    2014-08-08
  • C++淺析類與對象的基礎

    C++淺析類與對象的基礎

    類和對象是兩種以計算機為載體的計算機語言的合稱。對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數據類型;變量就是可以變化的量,存儲在內存中—個可以擁有在某個范圍內的可變存儲區(qū)域
    2022-05-05

最新評論

朝阳区| 乌拉特中旗| 三江| 彩票| 富川| 淮滨县| 贵阳市| 东兴市| 宾阳县| 南安市| 临沭县| 玉环县| 苏州市| 嘉义市| 陇川县| 金坛市| 自贡市| 和平区| 常熟市| 衡南县| 凤庆县| 玛多县| 鲁山县| 博爱县| 田阳县| 五寨县| 平和县| 利辛县| 松原市| 扶余县| 定兴县| 五峰| 敦煌市| 克拉玛依市| 柞水县| 九龙县| 桑植县| 同江市| 鹿泉市| 历史| 威远县|