ブール型 (bool、true、false) は、コンパイラで bool キーワードの認識が有効になっているかどうかによって制御されます。
互換モードでは、bool キーワードの認識はデフォルトで無効です。bool キーワードの認識を有効にするには、コンパイラオプション -features=bool を使用します。
標準モードでは、bool キーワードの認識はデフォルトで有効です。bool キーワードの認識を無効にするには、コンパイラオプション -features=no%bool を使用します。
互換モードでは、キーワードを有効にすることをお勧めします。これは、コード中でキーワードが現在どのように使用されているか明らかになるためです (注:既存のコードで使用されているブール型の定義に互換性があるとしても、実際の型が異なるため、名前の符号化に影響が生じます。その場合は、関数のパラメータにブール型を使用して、古いコードをすべて再コンパイルする必要があります)。
標準モードで bool キーワードを無効にすることは、お勧めしません。これは、C++ の標準ライブラリが、 bool 型に依存しているためです。後で bool を有効にすると、名前の符号化などのことで、さらに問題が生じます。
bool キーワードが有効な場合、コンパイラは、あらかじめ _BOOL マクロを 1 に定義します。キーワードが無効な場合、このマクロは定義されません。次に例を示します。
// 互換性のあるブール型の定義 #if !defined(_BOOL) && !defined(BOOL_TYPE) #define BOOL_TYPE // 局所インクルード対策 typedef unsigned char bool; // 標準モードでは、boolは1バイトを使用 const bool true = 1; const bool false = 0; #endif
互換モードでは、新しい組み込み型の bool 型とまったく同じように動作するブール型を定義することはできません。組み込み型の bool 型が C++ に追加されているのは、このためです。