bool
C または C++ の型は、マシン レベル (単語のサイズなど) で処理するのが "簡単" だったので、typdef された整数であるという印象を受けました。しかし、私は を実行したsizeof
ところ、驚いたことに、1 (バイト) が返されました。これは正しいですか?さて、私自身の短い実験によると、整数を使用する必要があるとすべてが教えてくれるのはなぜですか?
参考までに、C のブール型データ型に関するウィキペディアの記事を参照してください。
bool
C または C++ の型は、マシン レベル (単語のサイズなど) で処理するのが "簡単" だったので、typdef された整数であるという印象を受けました。しかし、私は を実行したsizeof
ところ、驚いたことに、1 (バイト) が返されました。これは正しいですか?さて、私自身の短い実験によると、整数を使用する必要があるとすべてが教えてくれるのはなぜですか?
参考までに、C のブール型データ型に関するウィキペディアの記事を参照してください。
一部のマシンでint
は、バイト サイズのオブジェクトよりも扱いやすい場合があります。しかし、多くのプロセッサでint
は、バイトサイズの整数よりも扱いが簡単ではありません。バイトはスペースをあまり必要としないため (少なくともint
、コンパイラがパディングする必要があるようにバイトの隣に貼り付けない場合)、状況によってはそうすることでメリットがあります。
標準は、実際にどのサイズでなければならないかについて何も言っていないと思います。編集: コメントが示すように、C++ 標準では、サイズは実装定義であり、1 である必要はないと明確に述べられています (ただし、1 にできないとは言いません)。bool
標準では、 a の値はtrue
またはであるとも述べてfalse
いますが、 type の初期化されていない変数を「使用」するとbool
、それは未定義の動作であり、これらの値のどちらでもないものになる可能性があります。
バイトを処理するのが「難しい」プロセッサがいくつかあります (古い Alpha、私のメモリが正しく機能する場合は MIPS のいくつかのバリアント) (単語全体を読み取る命令しかなく、個々のバイトをマスキングで管理する必要があるなど)。これらのプロセッサでは、int
サイズ付きの型を持つことは理にかなっています。そして、それがそれらのマシンの場合であっても、私は驚かないでしょう。C と C++ は、特定のアーキテクチャで何が「適切」であるかに応じて、型のサイズを変更できる言語であることを思い出してください。
最新の C 標準C11によると、<stdbool.h>
ヘッダーは次を定義します。
真実
これは整数定数 1 に展開されます。
間違い
これは整数定数 0 に展開されます