C陷阱:判断宏是否等于一个常数

下面这段代码有啥错误?

 

 

当 ULONG_MAX 未定义时,被判断为假!多么危险的一个陷阱!

增加以下验证即可查错:

 

这个 bug 耗费了我两个小时!

 

作者:
该日志由 rockeet 于2010年03月05日发表在C++分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
转载请注明: C陷阱:判断宏是否等于一个常数
标签:
【上一篇】
【下一篇】

您可能感兴趣的文章:

2 个回复

  1. orochi717说道:

    你这种方式,还不是没有解决。
    当ULONG_MAX 没有定义也只是 报个错。

    看你代码用了不少模板,这个干嘛不用模板搞定。
    如:
    template<int nSize>
    unsigned long __T_byte_swap(unsigned long x);

    template<>
    unsigned long __T_byte_swap<4>(unsigned long x){return __builtin_bswap32(x);}

    template<>
    unsigned long __T_byte_swap<8>(unsigned long x){return __builtin_bswap64(x);}

    #define byte_swap(x) __T_byte_swap<sizeof(long)>(x)

  2. whinah说道:

    回复 orochi717:模板是可以解决问题,但是,代码写得多了,你就会知道,如果模板不能带来额外的好处,还是少用为妙

发表评论

您必须 登录 后才能发表评论。