gpt4 book ai didi

c - c中的序列点

转载 作者:太空狗 更新时间:2023-10-29 16:23:40 24 4
gpt4 key购买 nike

A sequence point in imperative programming defines any point in a computer program's execution at which it is guaranteed that all side effects of previous evaluations will have been performed, and no side effects from subsequent evaluations have yet been performed.

这是什么意思?有人可以用简单的语言解释一下吗?

最佳答案

当一个序列点出现时,基本上意味着你可以保证之前的所有操作都完成了。

在没有中间序列点的情况下更改变量两次是未定义行为的一个示例。

例如,i = i++; 是未定义的,因为 i 的两次更改之间没有序列点。

Note that it's not just changing a variable twice that can cause a problem. It's actually a change involved with any other use. The standard uses the term "value computation and side effect" when discussing how things are sequenced. For example, in the expression a = i + i++, the i (value computation) and i++ (side effect) may be done in arbitrary order.

维基百科有一个 list of the sequence points在 C 和 C++ 标准中,尽管最终列表应始终取自 ISO 标准。来自 C11 附录 C(释义):


以下是标准中描述的序列点:

  • 在函数调用和实际调用中对函数指示符和实际参数的求值之间;
  • 在运算符 &&|| 的第一个和第二个操作数的求值之间;
  • 在对条件 ?: 运算符的第一个操作数求值与对第二个和第三个操作数中的任何一个进行求值之间;
  • 完整声明符的结尾;
  • 在完整表达式的评估和下一个要评估的完整表达式之间。以下是完整的表达:
    • 一个初始化器;
    • 表达式语句中的表达式;
    • 选择语句的控制表达式(ifswitch);
    • while 或 do 语句的控制表达式;
    • for 语句的每个表达式;
    • return 语句中的表达式。
  • 紧接在库函数返回之前;
  • 在与每个格式化输入/输出函数转换说明符关联的操作之后;
  • 紧接在每次调用比较函数之前和之后,以及在对比较函数的任何调用与作为参数传递给该调用的对象的任何移动之间。

关于c - c中的序列点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3575350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com