`
include0923
  • 浏览: 7394 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

阅读更多

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

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

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

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

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics