C 中bool型別的理解和疑惑

2021-05-26 10:25:17 字數 1437 閱讀 5578

1. bool 型別是c++的乙個標準型別

我們常會遇到bool,那麼bool與bool有什麼區別呢?

bool型別,通常是程式設計師自己或者看庫檔案模擬出來的。模擬的方法可以有以下兩種:

(1)typedef

typedef int bool;

#define true 1

#define false 0

這種bool其實就是int型別,只是方便使用和記憶而已。

(2)enum

typedef enum bool ;

2. 習慣使用bool型別,取代bool

(1)bool型別是c++的標準型別,使用起來更安全可靠。

(2)bool型別一般為1個位元組(sizeof(bool)可知),而上述兩種模擬出來的bool型別均為4個位元組。

3. 關於c語言中的_bool型別 

(1)c++標準:c++98

(2)c標準:c89,c99

(3)起初,c語言標準中沒有內建bool型別,於是程式設計師想使用bool型別時,就可以通過上述的兩種方式自己模擬。

c99中規定了bool型別,由於c++98中已經使用了bool型別,所以c99中就採用了_bool.

(4)vc6.0 對c99支援的並不好,所以_bool型別使用不了。

4. 關於c++中的bool型別實現

(1)在wtype.h中,有如下定義:

typedef short variant_bool;

typedef variant_bool _variant_bool;

(2)在objidl.h中,有如下定義:

#if 0

/* bool is a standard type in c++, and a standard macro expanding

to the _bool type in c99 (see stdbool.h) */

_variant_bool bool;

#endif

這個就有點讓人疑惑了,難道bool型別是short?但是實際使用就會發現bool和short有區別?(bool 1個位元組,short 2個位元組,bool的值只有0和1等)

接下來,我需要找一些資料,試著弄懂這點。

C 中的bool型別

學過c語言的程式設計師應該清楚,在c語言中,是沒有bool這個基礎型別的。在c語言中,當我們要表示真或假的時候,都是定義乙個非bool型別來使用的。在c 中,加入了布林bool這種基礎的型別,用true和false來表示真或者假,也可以用非0值來表示真,用0來表示假。在c 中,雖然布林型別只表示tr...

c 的bool型別與c 的bool型別

本來有點懶,不過還是記一下。使用hpsocket專案碰到c 呼叫結果不符合預期,也提了這個問題。最終發現是c 中的bool型別為1 byte,而c 中採用4 bytes導致,需要在dllimport時,使用 dllimport hpsocket dll path,charset charset.an...

c 中BOOL和bool的區別

1 型別不同 bool為int型 bool為布林型 2 長度不同 bool只有乙個位元組 bool長度視實際環境來定,一般可認為是4個位元組 3 取值不同 bool取值false和true,是0和1的區別 bool取值false和true,是0和非0的區別二 bool是標準c 資料型別,可取值tru...