C 中的未定义行为
Undefined behavior in C
在 this 网站的最后一节中,他们提供了 f(i = -1, i = -1)
作为未定义行为的示例,这是由于函数参数中子表达式的未排序求值所致。但是由于 在计算所有函数参数和函数指示符之后,在实际函数调用之前有一个序列点 ,f
将始终用 (-1, -1)
和 i
将被分配 -1
。这有没有可能不发生?
这是未定义的行为,因为标准有规定。修改之间没有序列点的变量是 UB。没有“除非两个修改设置相同的值”的例外规则。
... there is a sequence point after the evaluation
确实如此。 经过的评价,所以没什么用。这里的问题是在 i
before 序列点上有两个未排序的副作用。这是正式的 UB。
在 this 网站的最后一节中,他们提供了 f(i = -1, i = -1)
作为未定义行为的示例,这是由于函数参数中子表达式的未排序求值所致。但是由于 在计算所有函数参数和函数指示符之后,在实际函数调用之前有一个序列点 ,f
将始终用 (-1, -1)
和 i
将被分配 -1
。这有没有可能不发生?
这是未定义的行为,因为标准有规定。修改之间没有序列点的变量是 UB。没有“除非两个修改设置相同的值”的例外规则。
... there is a sequence point after the evaluation
确实如此。 经过的评价,所以没什么用。这里的问题是在 i
before 序列点上有两个未排序的副作用。这是正式的 UB。