C语言中避免未定义求值顺序的方法

    前面几篇文章一直在说关于未定义表达式求值顺序的问题,是时候做一点总结了,很多教材都建议在程序中尽量少用未定义的表达式,因为确定序列点确实是一件让人不爽的事,这里 一些建议,或许能减少未定义表达式的出现频率。

   1、确保一个表达式最多只修改一个对象:一个简单变量,一个数组成员、一个指针指向的位置。“修改”指的是诸如:=+=、-=等赋值操作和++、--运算。

  2、如果一个对象在一个表达式中出现一次以上而且在表达式中要被修改,则要确保对该对象的所有的读访问被用于计算它的最终值,该条规则允许i=i+1合法且有实在定义

 3、如果想破坏第一条规则,则要确保修改的对象互不相同。

  4、如果在两次修改或修改和访问之间置入定义的序列点操作符,则可以破坏第一条和第二条规则。例如:while( c = getchar()!=EOF && c!='\n'){...} ,这条表达式是合法的,因为虽然表达式两次访问 了同一个变量的值,但是第二次c 的访问是出现在&&引入的序列点之后。所以 不会受c值 可能被 修改影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值