【发布时间】:2023-01-13 21:46:22
【问题描述】:
当我在寻找表达式 v[i++]=i;为什么要定义行为,突然看到一个解释是因为表达式存在于程序中两个序列点之间,而c标准规定在两个序列点中副作用的发生顺序是不确定的,所以当程序中运行表达式,不确定是先运算++运算符还是先运算=运算符。我对此感到困惑。当表达式求值的过程中,是不是应该先用优先级判断,再引入序列点来判断先执行哪个子表达式呢?我错过了什么吗?
他这样解释的时候,是不是说在代码里写a[i]=y++;a[i++]=y;这样的代码?在程序中不能确定++运算符和=运算符不能确定谁先运行。
【问题讨论】:
-
这就是为什么您总是在不同的代码行中编写增量和赋值操作。那样的话,你和跟在你后面的程序员就不必进行这些脑力劳动了。
-
由于
a[i]=y++和a[i++]=y在赋值的两边都使用了不同的变量,所以没有问题。一切都很明确。
标签: c