これは、実行時にエンディアンを検出するために使用される一般的なトリックです。たとえば、C FAQで見られます。
int x = 1;
if (*(char *)&x == 1)
{
/* little-endian */
}
else
{
/* big-endian */
}
標準を読んだところによると、厳密なエイリアシング規則に違反しないため、未定義の動作にはなりません。
ともあれ、以外の整数型unsigned char
にパディングビット( など)を入れることができれば、たとえリトルエンディアン系であってもx
条件を間違えるのではないでしょうか?*(char *)x == 1
その場合、ユニオンを使用したソリューションはこれを行うのに適していますか?