sizeof
三項演算子を使用した演算子に関する小さなコードがあります。
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool a = true;
printf("%zu\n", sizeof(bool)); // Ok
printf("%zu\n", sizeof(a)); // Ok
printf("%zu\n", sizeof(a ? true : false)); // Why 4?
return 0;
}
出力(GCC):
1
1
4 // Why 4?
しかし、ここで、
printf("%zu\n", sizeof(a ? true : false)); // Why 4?
三項演算子はboolean
タイプを返し、sizeof bool
タイプは1
Cのバイトです。
では、なぜsizeof(a ? true : false)
4バイトの出力が得られるのでしょうか。
_Bool
サイズ1を持つことを明らかに定義しているが、true
and ではないという点で、この実装が「一貫性がない」理由false
です。しかし、私が知る限り、規格にはそれについて何も言うことはありません。
char a;
sizeof(a) == 1
と同じ理由とsizeof('a') == sizeof(int)
(Cで)。それは実装についてではなく、言語についてです。
sizeof(true)
か?多分それはシンをもう少し明確にするでしょう(特に、三項演算子が赤いニシンであることが明らかになるでしょう)。
true
は#define
1であるstdbool.h
ので、はい、これは文字通りの定義です。
sizeof(true)
そしてsizeof(false)
また、4:ide.geeksforgeeks.org/O5jvuN