C的。

在连续的 “序列点之间”对象的值可以将表达式一次只修改。 C 语言定义以下序列点:

  • 逻辑 " 与 " 运算符的左操作数 ()。 逻辑 " 与 " 运算符的左操作数完全计算和任何副作用完全在继续操作之前。 如果左操作数计算结果为 false (0),另一个操作数不会计算。

  • 逻辑或运算符 (||) 的左操作数。 逻辑或运算符左侧的操作数完全计算和任何副作用完全在继续操作之前。 如果左操作数计算结果为 true (非零),另一个操作数不会计算。

  • 逗号运算符左侧的操作数。 逗号运算符左侧的操作数完全计算和任何副作用完全在继续操作之前。 逗号运算符的两个操作数始终计算。 请注意的逗号运算符函数调用不保证计算顺序。

  • 函数调用运算符。 对函数的所有参数计算和任何副作用完全在函数的项之前。 计算顺序在参数中的未指定。

  • 条件运算符的第一个操作数。 条件运算符的第一个操作数完全计算和任何副作用完全在继续操作之前。

  • 完整的初始化表达式 (即不作为另一个表达式的一部分例如初始化的末尾在声明语句) 的表达式的结尾。

  • 在表达式语句的表达式。 表达式语句包括分号后跟一个可选表达式 (;)。 该表达式为其副作用计算此计算后,因此,具有序列点。

  • 在选择 (如果 或 switch) 语句的控制表达式。 ,在选定内容的代码依赖项中执行之前,该表达式完全计算和完整的任何副作用。

  • while 或语句的控制表达式。 ,在 while 或循环的下一次迭代的任何语句前,表达式将被完全计算和完整的任何副作用。

  • 语句的三个表达式中的每一个。 ,在 循环的下一次迭代的任何语句前,表达式将被完全计算和完整的任何副作用。

  • 在 return 语句的表达式。 ,在控件回调用函数之前,该表达式完全计算和完整的任何副作用。

请参见

概念

表达式计算(c)