今天早上我和同事讨论了一下一个用于检测字节序的“编程技巧”的正确性。
这个技巧是:
bool is_big_endian()
{
union
{
int i;
char c[sizeof(int)];
} foo;
foo.i = 1;
return (foo.c[0] == 1);
}
在我看来,这种使用 union
的方式是不正确的,因为设置联合体的一个成员并读取另一个成员是不明确定义的。但我必须承认,这只是一种感觉,我缺乏实际证据来支持我的观点。
这个技巧是正确的吗?谁是正确的?