下面这段代码有啥错误?
#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 耗费了我两个小时!
posted on 2010-03-05 18:26 能发波 阅读(391) 评论(0) 收藏 举报