2012-01-04 5 views
40

誰も私の説明することができます_BoolとBoolデータ型の違いはCで? たとえばCの_Boolとboolの違いは?

_Bool x = 1; 
    bool y = true; 

    printf("%d", x); 
    printf("%d", y); 
+1

'bool'もtypedefでなければなりません。Cにはその型はありません。 –

+0

_Complexと似ています。 –

答えて

87

1に展開されるマクロです。 boolはC99より前に予約されていなかったので、予約済みの_Boolキーワードを使用します。

boolは、stdbool.hを含めると_Boolの別名です。基本的にstdbool.hヘッダーを含むコードは、識別子boolが '予約済み'でコードが正常であること、つまりコードが独自の目的で使用されないことを示しています(同様に識別子truefalse)。

+4

+1には履歴が含まれています。 – Lindydancer

+18

長期的な意図は、boolをキーワードにするために規格が最終的に改訂されるということです。これはステップ1で、を使用してboolマクロを取得することができます。また、あなた自身の悪意のある目的のために未定義または再定義することができます。 ステップ2は、boolをから未定義または再定義することを拒否して、そのような嫌悪を阻止することです。次に、ステップ3では、Boolに_Boolのようなキーワードを使用し、_Boolは非推奨とマークします。 標準的なCコードには、長い道のり(例えば、今から10年または2年後)にbool型があり、新しいプログラマーはそれが欠けていることを知りません。 – tialaramex

+2

なぜ20年かかるのか分かりませんが、明らかに改善されています。この変更が気に入らないコードは、現在のコンパイラバージョンを使用してコンパイルすることができます。 –

13

違いはありません。

boolは、_Boolstdbool.hに展開されるマクロです。

true

そして、これらのデータタイプはC99に加えたstdbool.h

関連する問題