后增量运算符是否可以保证立即运行?

iTa*_*ayb -2 c c89 post-increment ansi-c

假设我有以下代码:

int i = 0;
func(i++, i++);
Run Code Online (Sandbox Code Playgroud)

在返回值后立即发生增量?是否保证第一个参数为0,第二个参数为1?

Lun*_*din 7

此代码中断有两个原因:

  • 在序列点之间访问变量两次,除了确定要存储的值之外,是未定义的行为.在评估函数参数之间没有序列点.意味着任何事情都可能发生,您的程序可能会崩溃和烧毁(或更可能显示不正确或垃圾值).
  • 函数参数的评估顺序是未指定的行为,这意味着您无法知道将首先评估哪一个.

未定义的行为和序列点

为什么这些结构(使用++)未定义的行为?