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