副作用
表达式语句对执行环境修改。
关键点赋值表达式、函数表达式都可能产生副作用。
序列点
之前的程序状态已完成,后序的状态改变还未开始。简单来说就是表达式的结尾,所以分号很重要,代表程序状态已完成。因此序列点之间执行上下文状态都会确定,不会留到下一条语句。
关键点调试程序的断点,程序在时序中状态稳定的点。在语句中加标点符号,只能在表达完整句子的后面加标点,不能随便加,会改变意思。
关键点序列点之间最好只产生一个副作用。多个副作用的发生顺序是不确定的,这取决于编译器,避免这种情况。
int i = 0;
i = i + 1; //右边读取值,左边赋值产生副作用
i = i++ + ++i; //等号后边的副作用顺序是未定义的,由具体的编译器决定。
while(i++ < 2){ //条件判断结束有个序列点,所以i已经完成自增,而不是执行循环体后,再自增。
printf("%d", i);
}