abs、 labs的返回值分别为int和long是很不恬当的!。。。-VC/MFC教程 ...

  第二电脑网导读:,int型的范围(-32768到32767)long型的范围(-2147483648到2147483647)。从数据类型的范围中,我们可以发现一个问题。当用abs(-32768)和labs(-2147483648)时,大家可以想想一下结果会是什么。当然结果分别是-32768和-2147483648。天啊!。。怎么还会出现这样的糟糕设计。我到现在才发现这个问题。谁来拯救这样糟糕库函数设计吧。针对以上的问题,笔者建议在使...
  正文:

abs和labs的原型:int abs(int); long labs(long);

理由1:abs labs函数作用是求解一个数的{jd1}值,而一个{jd1}值就一定大于等于0.。
返回值类型为int和long型就有很大意义上的空间利用率浪费。
理由2:以int型为2个字节,long型为4个字节为例,int型的范围(-32768到32767)
long型的范围(-2147483648到2147483647)。从数据类型的范围中,我们可以发
现一个问题。当用abs(-32768)和labs(-2147483648)时,大家可以想想一下结果会是
什么。当然结果分别是-32768和-2147483648。天啊!。。怎么还会出现这样的糟
糕设计。我到现在才发现这个问题。谁来拯救这样糟糕库函数设计吧。

针对以上的问题,笔者建议在使用时,在abs和labs强制类型转换:
(unsigned int)abs和(unsigned long)labs


来源:

郑重声明:资讯 【abs、 labs的返回值分别为int和long是很不恬当的!。。。-VC/MFC教程 ...】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——