C语言笔记:副作用和序列点,以及完整表达式的概念

副作用是对数据对象或文件的修改;
例如:states = 50;
将50赋值给states是该语句的副作用,
同理,调用printf()函数时,它显示的信息其实是副作用(printf()的返回值是待显示字符的个数)
序列点是程序执行的点,在该点上,所有的副作用都在进入下一步之前发生;例如完成y++;
    在c语言中,语句的分号(;)标记了一个序列点。
    在一个语句中,赋值运算符、递增运算符和递减运算符对运算对象的改变必须在程序执行下一条语句之前完成。
另外,任何一个完整的表达式的结束也是一个序列点。
逗号是一个序列点,所以逗号左侧项的所有副作用都在程序执行逗号右侧项之前发生
&& 和 || 运算符都是序列点。
序列点:
  1. ‘;’
  2. 任何一个完整的表达式的结束
  3. ‘,’
  4. &&
  5. ||
完整表达式是指这个表达式不是另一个更大的表达式的子表达式。例如,表达式语句中的表达式和while循环中作为测试条件的表达式,都是完整表达式。
while (guests++ <10)
        printf(“%d \n”, guests);
表达式 guests++ <10 是一个完整的表达式,因为它是while循环的测试条件,所以该表达式的结束就是一个序列点。因此,C保证了在程序转至执行printf() 之前发生副作用(即,递增guests)

说点什么

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒