在寻找编译时字节序检测宏时,我发现了这个:
#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可用),如果有的话,这个宏的注意事项是什么?
答案 0 :(得分:4)
这里确实没有未定义的行为,因此它在这个意义上是可移植的。
但条件并非必然证明IS_LITTLE_ENDIAN
nss。
int
的存储安排主要留给实施。除了经典的小端和大端方案之外还有其他选择,你的宏可能产生误报。