3

ここでエンディアンの決定についてこの質問を読んでいましたが、最初の答えは私をやや困惑させました。

ビッグエンディアンを決定するために使用されるコードは次のとおりです。

int is_big_endian(void)
{
    union {
        uint32_t i;
        char c[4];
    } bint = {0x01020304};

    return bint.c[0] == 1; 
} 

私の質問は、ここでコンパイラがその16 進数の配列に使用する型をどのように決定するのかということです。uint32_t技術的には、それまたはそれの両方に等しく適合するためですchar[4]

に保存してchar[4]スキップしないのはなぜunionですか?

unionここに見えない利点はありますか?これがタイプパニングと呼ばれていることは知っていますが、ここではその利点がわかりません。

4

3 に答える 3