下面这段代码有啥错误? #if ULONG_MAX == 0xFFFFFFFF inline unsigned long byte_swap(unsigned long x) { return __builtin_bswap32(x); } inline long byte_swap(long x) { return __builtin_bswap32(x); } #else inline unsigned long byte_swap(unsigned long x) { return __builtin_bswap64(x); } inline long byte_swap(long x) { return __builtin_bswap64(x); } #endif // ULONG_MAX 当 ULONG_MAX 未定义时,被判断为假!多么危险的一个陷阱! 增加以下验证即可查错: #ifdef ULONG_MAX # if ULONG_MAX != 0xFFFFFFFFul # if ULONG_MAX != 0xFFFFFFFFFFFFFFFFul # error "ULONG_MAX error" is ULONG_MAX # endif # endif #else # error "ULONG_MAX is not defined" #endif 这个 bug 耗费了我两个小时!