【发布时间】:2021-05-14 03:16:55
【问题描述】:
在this 网站的最后一节中,他们提供了f(i = -1, i = -1) 作为未定义行为的示例,原因是函数参数中子表达式的评估未排序。但是由于在所有函数参数和函数指示符的求值之后和实际函数调用之前都有一个序列点,f 将始终使用(-1, -1) 调用,而i 将被分配-1。有没有可能不发生这种情况?
【问题讨论】:
-
也许函数会改变
i(全局变量?) -
也许,但它仍然不会被定义为行为吗?因为最后我将“肯定”在“f”内分配值而不是-1。
-
要明确一点:函数调用中的逗号不是是一个序列点。函数参数求值顺序未指定,所以这确实是UB。
-
链接的答案有一个(稍微做作的)可能出错的示例。
-
@dratenik 鉴于当今的高度流水线 CPU 实际上确实并行执行多个指令,我不会说这个例子是在任何人为设计的方式。
标签: c undefined-behavior sequence-points