1. ホーム
  2. c

[解決済み] なぜ "sizeof(a ? true : false)" は4バイトの出力をするのでしょうか?

2022-06-04 16:28:14

質問

私は 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バイトの出力を与えるのでしょうか?

どのように解決するのですか?

それは、あなたが #include <stdbool.h> . そのヘッダーは はマクロを定義しています。 true そして false であることを 1 であり 0 というように、文章はこのようになります。

printf("%zu\n", sizeof(a ? 1 : 0)); // Why 4?

sizeof(int) は、お使いのプラットフォームで4です。