为了账号安全,请及时绑定邮箱和手机立即绑定

序列点在c

序列点在c

C
Cats萌萌 2019-08-13 14:34:20
序列点在c命令式编程中的序列点定义了计算机程序执行中的任何点,在该点处保证先前评估的所有副作用都已执行,并且尚未执行后续评估的副作用。这是什么意思?有人可以用简单的语言解释一下吗?
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

关于序列点的一个重要注意事项是它们不是全局的,而应该被视为一组局部约束。例如,在声明中

a = f1(x ++)+ f2(y ++);

在评估x ++和调用f1之间有一个序列点,在y ++的评估和对f2的调用之间有另一个序列点。但是,不能保证在调用f2之前或之后x是否会递增,也不能保证y在调用x之前或之后是否递增。如果f1改变y或f2改变x,则结果将是未定义的(编译器生成的代码例如读取x和y,递增x,调用f1,检查y与先前读取的值,以及 - 如果它改变了 - 继续横冲直撞寻找并摧毁所有Barney的视频和商品;我认为任何真正的编译器都不会产生实际上会这样做的代码,唉,但它会被允许在标准之下)。


查看完整回答
反对 回复 2019-08-13
?
偶然的你

TA贡献1841条经验 获得超3个赞

通过一个例子扩展了paxdiablo的答案。

假设声明

x = i++ * ++j;

有三个副作用:将结果分配i * (j+1)给x,将i加1,并将1加1。副作用的应用顺序是未指定的; i和j可以在被评估之后立即递增,或者它们可以不被递增,直到已经评估了两个之后但是在分配了x之前,或者它们可以不递增直到分配了x之后。

序列点是已应用所有副作用的点(x,i和j都已更新),无论它们的应用顺序如何


查看完整回答
反对 回复 2019-08-13
  • 3 回答
  • 0 关注
  • 412 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信