_Bool
C99のタイプ( typedef
'ed to bool
in 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
です。
_Bool
bool
したがって、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)