問題首先請大家回想一下,在你們所編寫的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系統為例)。