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タイプは1Cのバイトです。
では、なぜsizeof(a ? true : false)4バイトの出力が得られるのでしょうか。
_Boolサイズ1を持つことを明らかに定義しているが、trueand ではないという点で、この実装が「一貫性がない」理由falseです。しかし、私が知る限り、規格にはそれについて何も言うことはありません。
char a; sizeof(a) == 1と同じ理由とsizeof('a') == sizeof(int)(Cで)。それは実装についてではなく、言語についてです。
sizeof(true)か?多分それはシンをもう少し明確にするでしょう(特に、三項演算子が赤いニシンであることが明らかになるでしょう)。
trueは#define1であるstdbool.hので、はい、これは文字通りの定義です。
sizeof(true)そしてsizeof(false)また、4:ide.geeksforgeeks.org/O5jvuN