我已经搜索了宏以确定机器上的字节顺序,并且没有找到任何标准的预处理器宏,但很多解决方案在运行时都这样做.为什么我应该在运行时检测到endianess?
如果我做那样的事情:
#ifdef LITTLE_ENDIAN
inline int swap(int& x) {
// do swap anyhow
return swapped;
}
#elif BIG_ENDIAN
inline int& swap(int& x) { return x; }
#else
#error "some blabla"
#endif
int main() {
int x = 0x1234;
int y = swap(x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器只生成一个函数.
但如果我这样做(见predef.endian):
enum {
ENDIAN_UNKNOWN,
ENDIAN_BIG,
ENDIAN_LITTLE,
ENDIAN_BIG_WORD, /* Middle-endian, Honeywell 316 style */
ENDIAN_LITTLE_WORD /* Middle-endian, PDP-11 style */
};
int endianness(void)
{
uint8_t buffer[4];
buffer[0] = 0x00;
buffer[1] = 0x01; …Run Code Online (Sandbox Code Playgroud)