為什麼C沒有布林型別?

時間 2021-10-25 18:23:57

1樓:

相對於其他高階語言,c的語法糖不多,而且c是講究強制轉換的,你用個char不就乙個位元組了嗎?由於記憶體的對齊,乙個結構體要弄成2^n這麼大才最有效率,多幾個布林變數用位元組表示,一般對記憶體沒啥影響

2樓:搞點肉蛋奶

C語言(2023年)或者說「New B」(2023年)在PDP-11平台設計之初,就確定了「C語言的基本資料型別直接與底層硬體相對應」的原則,所以那時候的C語言不會內建沒有得到底層硬體直接支援的資料型別。除了沒有內建複數型別和布林型別,此時期的C語言也沒有內建浮點型別(直到後來的硬體平台提供了直接的運算支援)。

當然,如其他答主提到的,現在的C語言是可以使用布林型別了。

3樓:

C語言的C99標準是2023年發布的,C99已經增加了bool型別,只需要包含標頭檔案stdbool.h即可,都發布二十多年了,你應該好好思考你是怎麼學的C語言,總不是二十多年前學的吧?

ps:到現在還有很多人,包括很多資料介紹說C語言陣列宣告時,長度不能是變數。實際上C99就已經支援了,可見國內C語言教育多麼水

4樓:UXOD

綜合目前所有答案:

C99 新增了 _Bool 型別,可以引入 stdbool.h 將 bool 作為關鍵字(就是乙個巨集)

使用結構體的位域(Bit field)來實現無法對齊和取址,即不能使用指標

5樓:

在實際嵌入式開發中,由於四位元組/八字節對齊的問題,棧上的變數實際占用的空間並不是如編寫時候所想的那樣,會存在很多padding的情況。所以實際上很多時候單位元組的bool型別都是沒有意義的,更何況單bit。

如果確實遇到了需要非常珍惜記憶體的情況,C提供了bit field的玩法來滿足要求,例如:

typedef

struct

_st_foo

foo_t

;使用bit 。

順帶一提,C99標準中已經提供了_Bool型別以及stdbool.h檔案來提供與C++原生bool型別相同的開發體驗

6樓:

第一,c99有_Bool型別

第二,布林型別並不非要用1bit來儲存

第三,小於1位元組的變數型別,無法對變數取位址,這種例外帶來的麻煩非常大

為什麼c 布林型別的最小尺寸是未定義?

Nessaj 參見n4810.pdf 6.7.1 Fundamental types 10 Type bool is a distinct type that has the same object representation,value representation,and alignment ...

為什麼C 預設初始化時,內建型別和類型別區別對待?

夏之幻想 使用value initialization 可以保證初等型別的值初始化為0,類型別呼叫無參建構函式,這樣它們的行為可以看成一致的了。 靈劍 其實沒有什麼區別啊,相當於基本型別的建構函式什麼都沒有做,類的建構函式如果你在預設函式裡面什麼都不做的話,也沒有哪個欄位會被自動初始化的,只有虛函式...

法布林為什麼不怕蟲子?

空行 從小捉蟲到現在,黃蜂 蜈蚣 天牛 鼠婦 蚯蚓 蜘蛛 蠍子 螞蟻 蠼螋 螳螂,各種甲種 飛蛾 軟體動物等等,還有蝙蝠 蛇 鼠類 等等 她們有的美豔 有的搞笑 有的憨憨的 有的鬼頭鬼腦 有的穩重 有的慌慌張張 有的兇巴巴 它們的身體有的外表脆弱精緻 有的粗重 有的奇特 有的極為精巧 有時候很多觀念...