副作用

表达式语句对执行环境修改。
关键点赋值表达式、函数表达式都可能产生副作用。

序列点

之前的程序状态已完成,后序的状态改变还未开始。简单来说就是表达式的结尾,所以分号很重要,代表程序状态已完成。因此序列点之间执行上下文状态都会确定,不会留到下一条语句。
关键点调试程序的断点,程序在时序中状态稳定的点。在语句中加标点符号,只能在表达完整句子的后面加标点,不能随便加,会改变意思。
关键点序列点之间最好只产生一个副作用。多个副作用的发生顺序是不确定的,这取决于编译器,避免这种情况。

  1. int i = 0;
  2. i = i + 1; //右边读取值,左边赋值产生副作用
  3. i = i++ + ++i; //等号后边的副作用顺序是未定义的,由具体的编译器决定。
  4. while(i++ < 2){ //条件判断结束有个序列点,所以i已经完成自增,而不是执行循环体后,再自增。
  5. printf("%d", i);
  6. }