C語言中有沒有bool類型?

來源:互聯網
上載者:User
問題首先請大家回想一下,在你們所編寫的C程式中,是否使用過bool(布爾)類型?bool類型一般用來表示真假,是程式設計中一個很基本的資料類型。但是,C語言裡面並不直接支援bool類型。一些初學C語言,或者是對C語言不是很精通的朋友肯定覺得很奇怪,為什麼在C++,JAVA等語言裡使用的bool類型,在C語言裡無法使用了呢?
問題解析

bool類型的變數,為0時表示為假,為非0時表示為真。但是原始C語言中並不支援bool類型,若需要使用bool類型可以借用int類型自己定義一下,例如:

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


然後就可以在程式中使用bool類型了。用32位的int類型來當bool使用,這樣無疑浪費了記憶體資源,因此對於記憶體敏感的程式中可以使用char來定義bool類型:

typedef char bool;#define TRUE 1#define FALSE 0

進一步討論

C語言並非沒有bool類型,而是在C99標準之前沒有。C99標準中新增的標頭檔中引入了bool類型,與C++中的bool相容。該標頭檔為stdbool.h,其源碼如下所示:

#ifndef _STDBOOL_H#define _STDBOOL_H#ifndef __cplusplus#define bool_Bool#define true1#define false0#else /* __cplusplus *//* Supporting <stdbool.h> in C++ is a GCC extension.  */#define _Boolbool#define boolbool#define falsefalse#define truetrue#endif /* __cplusplus *//* Signal that all the definitions are present.  */#define __bool_true_false_are_defined 1#endif /* stdbool.h */


代碼中的_Bool是C99標準為bool類型引入的新的關鍵字,sizeof(_Bool)的值為1,表面其為bool類型。既然為bool類型,那麼0表示為假,其他任何值都表示為真,我們可以做一個小實驗來測試一下:

bool bb=10;bool aa=0;printf(" %d %d  \n",bb,aa);

輸出的結果為1和0,這表明bool類型變數賦值為非0值得時候,只儲存其值為1。


最後,當需要使用bool類型時,推薦使用C99標準的bool類型而不是自己去定義,引入標頭檔<stdbool.h>即可,該標頭檔位於

/usr/lib/gcc/i386-redhat-linux/4.1.1/include/stdbool.h(以我自己的Linux系統為例)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.