【发布时间】:2018-01-29 21:16:25
【问题描述】:
a 是一个数组,foo 是一个函数,i 是一个 int。
a[++i] = foo(a[i-1], a[i]);
上面的代码会有未定义的行为吗?
数组索引++i、i-1 和i,保证在数组范围内。
【问题讨论】:
-
是什么让您认为它可能具有未定义的行为?
-
@litelite 您认为序列点在哪里?执行顺序是什么?
-
@PeterJ 序列点?
-
@litelite 是评估 ++ 的点。在 foo 之前还是之后?
-
这实际上很棘手,因为函数调用 是序列点(以及从库函数返回)。它在这里没有帮助,因为分配是无序的,所以你不知道函数调用何时发生相对于在
a[++i]中递增i。
标签: c arrays language-lawyer increment undefined-behavior