想必很多初學者都曾遇到過在c程式中編寫bool型別變數結果編譯報錯的情況吧?
我們知道在c++裡有專門的bool型別,用來表示真或假。但是在c語言裡沒有這樣的型別(我一直這麼認為),表示式的值0為假,非0為真。所以條件判斷語句非常靈活,甚至乙個指標型別都可以是條件表示式。
為了使程式更清晰,我們常常會給出如下的巨集定義:
typedef int bool;
#define true 1
#define false 0
這是最常見的寫法,能被任何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型別是c99標準引入的新的關鍵字。對,是關鍵字,而不是巨集定義,也不是typedef。通過sizeof(_bool);得知這個型別佔1個位元組,而且無論給這個型別的變數賦任何非0整數值,其值都是1,這也說明了他不是其他整數型別的別名。
c語言一共有這麼幾個版本:
2023年
,丹尼斯·里奇(dennis ritchie)和
布萊恩·柯林漢
(brian kernighan)合作出版了《
c程式語言
》的第一版。書中介紹的c語言標準也被c語言程式設計師稱作「k&r c」,第二版的書中也包含了一些ansi c的標準。
2023年,c語言被 ansi 標準化(ansi x3.159-1989)。標準化的乙個目的是擴充套件k&r c。在ansi標準化自己的過程中,一些新的特性被加了進去。ansi也規定了一套標準函式庫。
在ansi的標準確立後,c語言的規範在一段時間內沒有大的變動,然而c++在自己的標準化建立過程中繼續發展壯大。《標準修正案一》在2023年為c語言建立了乙個新標準,但是只修正了一些c89標準中的細節和增加更多更廣的國際字符集支援。不過,這個標準引出了2023年iso 9899:1999的發表。它通常被稱為c99。c99被ansi於2023年3月採用。
其實,c語言不是沒有布林型別,只能說在c99標準之前沒有。現在只要在原始檔中包含stdbool.h這個標頭檔案,就可以在c語言裡像c++那樣使用bool型別了。
注意:
以上 僅針對符合c99標準的編譯器,而gcc3.4.5。vc6等編譯器不在本文討論範圍內。
C語言的布林型別 Bool
也許很多人都和我一樣,不知道現在的c語言已經有了布林型 從c99標準開始,型別名字為 bool 在此之前的c語言中,使用整型int來表示真假。在輸入時 使用非零值表示真 零值表示假。在輸出時 真的結果是1,假的結果是0 這裡我所說的 輸入 意思是 當在乙個需要布林值的地方,也就是其它型別轉化為布林型...
C語言的布林型別 Bool
也許很多人都和我一樣,不知道現在的c語言已經有了布林型 從c99標準開始,型別名字為 bool 在此之前的c語言中,使用整型int來表示真假。在輸入時 使用非零值表示真 零值表示假。在輸出時 真的結果是1,假的結果是0 這裡我所說的 輸入 意思是 當在乙個需要布林值的地方,也就是其它型別轉化為布林型...
C語言的布林型別 Bool
也許很多人都和我一樣,不知道現在的c語言已經有了布林型 從c99標準開始,型別名字為 bool 在此之前的c語言中,使用整型int來表示真假。在輸入時 使用非零值表示真 零值表示假。在輸出時 真的結果是1,假的結果是0 這裡我所說的 輸入 意思是 當在乙個需要布林值的地方,也就是其它型別轉化為布林型...