_BoolC99のタイプ( typedef'ed to boolin stdbool.h)には標準で定義されたサイズはありませんが、C99標準のセクション6.2.5によると:
2 An object declared as type _Bool is large enough to store the values 0 and 1.
Cでは、(ビットフィールドを除く)最小のアドレス指定可能なオブジェクトは、charであり、これは少なくとも8ビット幅であり、sizeof(char)常に1です。
_Boolboolしたがって、sizeof少なくとも1のがあり、私が見たほとんどの実装では、sizeof(bool)/sizeof(_Bool)は1です。
GCCを見ると、次のようになりstdbool.hます。
#define bool _Bool
#if __STDC_VERSION__ < 199901L && __GNUC__ < 3
typedef int _Bool;
#endif
#define false 0
#define true 1
したがって、コンパイル時に古いバージョンのGCCと古いバージョンのC標準を使用する場合intは、_Bool型として使用します。
もちろん、興味深いことに、これをチェックしてください:
#include <stdio.h>
#include <stdbool.h>
int main() {
printf("%zu\n", sizeof(_Bool));
printf("%zu\n", sizeof(true));
printf("%zu\n", sizeof(false));
}
出力:
λ > ./a.out
1
4
4
GCC 4.2.4、Clang 3.0、およびGCC4.7.0はすべて同じ出力です。trinithisが指摘しているように、intリテラルのサイズ(少なくとも。)を使用しているため、より大きなサイズsizeof(true)を生成します。sizeof(false)sizeof(int)