这是用于在运行时检测字节序的常用技巧,例如在C FAQ中可以看到:
int x = 1;
if (*(char *)&x == 1)
{
/* little-endian */
}
else
{
/* big-endian */
}
根据我对标准的阅读,它不会导致未定义的行为,因为它不会违反严格的别名规则。
无论如何,只要整数类型除了unsigned char
可以包含填充位(例如x
),*(char *)x == 1
即使它是一个小端系统,条件也不会出错吗?
在这种情况下,工会的解决方案是否更适合这样做?