問題
首先請大家回想一下,在你們所編寫的C程序中,是否使用過bool(布爾)類型?bool類型一般用來表示真假,是程序設計中一個很基本的數據類型。但是,C語言裡面並不直接支持bool類型。一些初學C語言,或者是對C語言不是很精通的朋友肯定覺得很奇怪,為什麼在C++,JAVA等語言裡使用的bool類型,在C語言裡無法使用了呢?
問題解析
bool類型的變量,為0時表示為假,為非0時表示為真。但是原始C語言中並不支持bool類型,若需要使用bool類型可以借用int類型自己定義一下,例如:
[cpp]
typedef int bool;
#define TRUE 1
#define FALSE 0
然後就可以在程序中使用bool類型了。用32位的int類型來當bool使用,這樣無疑浪費了內存資源,因此對於內存敏感的程序中可以使用char來定義bool類型:
[cpp]
typedef char bool;
#define TRUE 1
#define FALSE 0
進一步討論
C語言並非沒有bool類型,而是在C99標准之前沒有。C99標准中新增的頭文件中引入了bool類型,與C++中的bool兼容。該頭文件為stdbool.h,其源碼如下所示:
[cpp]
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#else /* __cplusplus */
/* Supporting <stdbool.h> 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標准為bool類型引入的新的關鍵字,sizeof(_Bool)的值為1,表面其為bool類型。既然為bool類型,那麼0表示為假,其他任何值都表示為真,我們可以做一個小實驗來測試一下:
[cpp]
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系統為例)。