序列点

国际标准 ISO / IEC 9899:201x 编程语言 - C.

访问易失性对象,修改对象,修改文件或调用执行任何这些操作的函数都是副作用,这些都是执行环境状态的变化。

在表达式 A 和 B 的评估之间存在序列点意味着在与 B 相关联的每个值计算和副作用之前,对与 A 相关联的每个值计算和副作用进行排序。

以下是 2011 年在线出版的 C 语言标准草案附件 C 的完整序列点列表 :

序列点

1 以下是 5.1.2.3 中描述的序列点:

  • 在函数调用和实际调用中的函数指示符和实际参数的评估之间。 (6.5.2.2)。
  • 在以下运算符的第一个和第二个操作数的计算之间:逻辑 AND && (6.5.13); 逻辑 OR ||6.5.14 ); 逗号 , (6.5.17)。
  • 在评估条件 ? : 运算符的第一个操作数和第二个和第三个操作数中的任何一个之间进行评估(6.5.15)。
  • 完整声明者的结尾:声明者(6.7.6);
  • 在评估完整表达式和下一个要评估的完整表达式之间。以下是完整表达式:不属于复合文字的初始化程序(6.7.9); 表达式中的表达式(6.8.3); 选择陈述的控制表达式( ifswitch )(6.8.4); whiledo 陈述的控制表达式 (6.8.5); for 语句的每个(可选)表达式 (6.8.5.3); return 语句中的(可选)表达式 (6.8.6.4)。
  • 紧接库函数返回之前(7.1.4)。
  • 在与每个格式化的输入/输出函数转换说明符(7.21.6,7.29.2)相关联的操作之后。
  • 紧接在每次调用比较函数之前和之后,以及对比较函数的任何调用和作为参数传递给该调用的对象的任何移动之间(7.22.5)。