2

boolC または C++ の型は、マシン レベル (単語のサイズなど) で処理するのが "簡単" だったので、typdef された整数であるという印象を受けました。しかし、私は を実行したsizeofところ、驚いたことに、1 (バイト) が返されました。これは正しいですか?さて、私自身の短い実験によると、整数を使用する必要があるとすべてが教えてくれるのはなぜですか?

参考までに、C のブール型データ型に関するウィキペディアの記事を参照してください。

4

4 に答える 4

7

一部のマシンでintは、バイト サイズのオブジェクトよりも扱いやすい場合があります。しかし、多くのプロセッサでintは、バイトサイズの整数よりも扱いが簡単ではありません。バイトはスペースをあまり必要としないため (少なくともint、コンパイラがパディングする必要があるようにバイトの隣に貼り付けない場合)、状況によってはそうすることでメリットがあります。

標準は、実際にどのサイズでなければならないかについて何も言っていないと思います。編集: コメントが示すように、C++ 標準では、サイズは実装定義であり、1 である必要はないと明確に述べられています (ただし、1 にできないとは言いません)。bool標準では、 a の値はtrueまたはであるとも述べてfalseいますが、 type の初期化されていない変数を「使用」するとbool、それは未定義の動作であり、これらの値のどちらでもないものになる可能性があります。

バイトを処理するのが「難しい」プロセッサがいくつかあります (古い Alpha、私のメモリが正しく機能する場合は MIPS のいくつかのバリアント) (単語全体を読み取る命令しかなく、個々のバイトをマスキングで管理する必要があるなど)。これらのプロセッサでは、intサイズ付きの型を持つことは理にかなっています。そして、それがそれらのマシンの場合であっても、私は驚かないでしょう。C と C++ は、特定のアーキテクチャで何が「適切」であるかに応じて、型のサイズを変更できる言語であることを思い出してください。

于 2013-07-17T21:27:00.767 に答える
1

最新の C 標準C11によると、<stdbool.h>ヘッダーは次を定義します。

真実

これは整数定数 1 に展開されます。

間違い

これは整数定数 0 に展開されます

于 2013-07-17T21:27:02.423 に答える