C99標準之前沒有bool型別(C99提供)

2021-07-11 07:22:00 字數 1224 閱讀 7349

我們知道在c++裡有專門的bool型別,用來表示真或假。但是在c語言裡沒有這樣的型別。

表示式的值0為假,非0為真。所以條件判斷語句( if(…)、while(…) )非常靈活,甚至乙個指標型別都可以是條件表示式。

為了使程式更清晰,我們常常會給出如下的巨集定義:

typedef int bool;

#define true 1

#define false 0

這是最常見的寫法,能被任何c語言編譯器認可。

今天我在一段程式裡看見這麼一行 #include ,這個陌生的標頭檔案還以std打頭而且還和bool有關,引起了我的警覺,

隨後我看了一下這個標頭檔案的源**,內容如下:

/*

* 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這個型別產生的興趣。

通過sizeof(_bool);得知這個型別佔1個位元組,而且無論給這個型別的變數賦任何非0整數值,其值都是1,這也說明了他不是其他整數型別的別名。

好了,其實說白了,c語言不是沒有布林型別,只能說在c99標準之前沒有。

現在只要在原始檔中包含stdbool.h這個標頭檔案,就可以在c語言裡像c++那樣使用bool型別了。

對C99新增的 Bool型別的理解

傳統 指c90 c標準中是沒有布林型別的,對於c來說,非0即是真,而0即是假,這裡0不僅包括整型家族的0,還包括浮點家族的0.0,有如下 1 if 0.0 else 輸出的結果是 false 在c中,一直使用int型別表示真假值 布林值 所以,任何條件表示式的結果要麼是1 真 要麼是0 假 在c99...

C99標準轉義符大全

轉義字元是c語言中表示字元的一種特殊形式。通常使用轉義字元表示ascii碼字符集中不可列印的控制字元和特定功能的字元,如用於表示字元常量的單撇號 用於表示字串常量的雙撇號 和反斜槓 等。轉義字元用反斜槓 後面跟乙個字元或乙個八進位制或十六進製制數表示。轉義字元 意義 ascii碼值 十進位制 a 響...

C99標準的新特性

c語言的發展歷史大致上分為4個階段 old style c c89 c99和c11.c89是最早的c語言規範,於1989年提出,1990年先由ansi 美國國家標準委員會,american national standards institute 推出ansi版本,後來被接納為iso國際標準 iso...