这个C99 IS_LITTLE_ENDIAN宏是否可移植?

时间:2017-03-22 10:17:49

标签: c endianness

在寻找编译时字节序检测宏时,我发现了这个:

#define IS_LITTLE_ENDIAN (1 == *(unsigned char *)&(const int){1})

根据an answer to C Macro definition to determine big endian or little endian machine?,这可以在编译时(至少使用GCC)进行评估,并且不假设任何内存对齐。这真的是可移植的(如果有C99可用),如果有的话,这个宏的注意事项是什么?

1 个答案:

答案 0 :(得分:4)

这里确实没有未定义的行为,因此它在这个意义上是可移植的。

但条件并非必然证明IS_LITTLE_ENDIAN nss。

int的存储安排主要留给实施。除了经典的小端和大端方案之外还有其他选择,你的宏可能产生误报。