C陷阱与缺陷(下)
2023-06-19 15:27:39    个人图书馆-汉无为

main(){FILE*fp;fp=fopen(file,FILE*fp;fun(){errno=biggest=x[biggest=((biggest)>(x[i++])?(biggest):(x[i++]));

变量 biggest 将与 x[i++]比较。i的值发生了变化,如果前面关系运算的结果为 false(假),后面 i++的副作用导致结果错误。解决这类问题的一个办法是,确保宏 max 中的参数没有副作用。


(资料图片)

biggest=x[

q=a/b;r=a%b;

希望 a、b、q、r之间维持怎样的关系呢?

最重要的一点,q*b +r == a,因为这是定义余数的关系。如果改变 a 的正负号,希望改变 q 的符号,但不改变q的绝对值。当 b>0 时, 希望保证 r>=0 且 r这三条性质是整数除法和余数操作所应该具备的。很不幸的是,它们不可能同时成立。

考虑一个简单的例子: 3/2,商为1,余数也为 1。此时第 1 条性质得到了满足。(-3)/2 的值应该是多少呢? 如果要满足第 2 条性质,答案应该是-1,但如果是这样,余数就必定是-1,这样第 3 条性质就无法满足了。如果首先满足第3 条性质,即余数是 1,这种情况下根据第 1 条性质则商是-2,那么第 2 条性质又无法满足了。因此,C 语言在实现整数除法截断运算时,必须放弃上述三条原则中的至少一条。大多数程序设计语言选择了放弃第 3 条,而改为要求余数与被除数的正负号相同。

假定一个数 n代表经过某种运算后的结果,希望通过除法运算得到 h,满足 0<=h< HASHSIZE。又如果已知 n 恒为非负,那么只需要像下面一样简单地写: h=n % HASHSIZE; 然而,如果n 有可能为负数,而此时h 也有可能为负,那么这样做就不一定总是合适的了。不过已知 h>-HASHSIZE,可以这样写:

h=n%HASHSIZE;{while("\t"=c||""==c||"\n"==c)c=getc(f);

这样,如果不小心把比较运算符==写成了赋值运算符= ,编译器将会捕获到这种错误,并给出诊断信息:试图给字符常量 \t 赋值是非法的。

考查最简单的特例。无论是构思程序的工作方式,还是测试程序的工作情况,这一原则都是适用的。当部分输入数据为空或者只有一个元素时(临界点),很多程序都会执行失败,这些情况应提前就考虑到。

使用不对称边界。C 语言中数组下标取值从 0 开始, 各种计数错误的产生与这一点或多或少有关系。一有旦理解了这个事实,处理这些计数错误就变得不那么困难。

注意潜伏在暗处的 Bug。各种 C 语言实现存在着或多或少的细微差别,应该坚持只使用 C 语言中众所周知的部分,避免使用“生僻”的特性。这样能方便地将程序移植到新的机器或编译器,减少编译问题。

防御性编程。对程序运行或编译器实现的假设不要过多,再怎么不可能发生的事情,某些时候还是有可能发生的,一个健壮的程序应该预先考虑到这些异常情况。可参考《动态内存管理及防御性编程》。

结束...

关键词:

下一篇: 最后一页
上一篇: 黑水美国电影简介(黑水 美国2019年托德海因斯执导的电影) 天天时讯

C陷阱与缺陷(下)

黑水美国电影简介(黑水 美国2019年托德海因斯执导的电影) 天天时讯

全球信息:爱你到来生迟暮电视剧大结局是什么

传媒行业周报:八部门发文推进职业教育产教融合 博纳举办2023年新片发布会

天天快资讯:北京社会保险网上服务平台app_北京社会保险网上服务平台

北向资金增持36只市值超亿元股票

五粮液造冰棒,哈根达斯造酸奶,品牌热衷“反差萌”?-环球精选

满地科技股份(01400)1月4日发行32.63亿股计划股份-全球最新

英国任命AI安全工作组负责人 研究AI风险|天天信息

安阳高新区参加2023年长三角地区招商引智推介大会|全球微速讯

桃李杏陆续飘香 这是夏天的味道_头条

官方指导价10.87-11.47万元 吉利星瑞1.5TD扶摇版正式上市 全球微头条

白钢氩弧焊打底技巧(白钢)

男子地铁站赤裸上身将女站务员压身下? 警方通报 焦点讯息

热点!笑傲江湖装备打造_笑傲江湖生产材料

当前简讯:郑海霞:恋爱2次,第一次和平分手,第二次被追2年,43岁为爱而婚

全球信息:陆飞:用“新”引领消费升级

6月18日晚间公告集锦:容大感光上半年净利同比预增98%-128%

拜腾汽车两家公司被申请破产

神仙友谊!谢娜:何炅是无条件爱我的人

浙江杭州推动智能家居产业链提升——让家变得更“聪明”(经济新方位·衣食住行看转型)

环球热讯:蔡天凤葬礼摆满1比1超大遗照!儿女为妈妈献花,遗体穿蛋糕裙供瞻仰

18-Spring高级容器初始化:BeanFactoryPostProcessor如何执行

【全球独家】2023年,是思维财经&投资者网创立十五周年……

青萝卜补铁,萝卜干补铁

当前播报:容大感光:预计上半年归母净利同比增98%-128%

在中国当“岛主”,门槛不低当好更难|每日视点

天天最新:美非裔奥运冠军死于分娩 美媒:孕产妇死亡率仍有巨大种族差异

天天快播:山不碍路,路自通山

如果她还在,应该写下很多本日记了……|精选

全球微速讯:芭乐果的籽能吃吗 芭乐果的正确吃法

怀疑被偷拍了如何合理维权?一图读懂

台退将群聚迎黄埔建校百年 侯友宜争取支持|全球新动态

今日热文:供热通风与空调工程技术可以考哪些大学 供热通风与空调工程技术学校排名

屏南县气象台发布雷电黄色预警信号 【2023-06-17】

环球实时:利用电脑如何赚钱_利用电脑赚钱的5种方法