ここでエンディアンの決定についてこの質問を読んでいましたが、最初の答えは私をやや困惑させました。
ビッグエンディアンを決定するために使用されるコードは次のとおりです。
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
ここに見えない利点はありますか?これがタイプパニングと呼ばれていることは知っていますが、ここではその利点がわかりません。