函数反向传递参数

Awa*_*ais 7 c++ reverse function operator-precedence

这是我的功能:

void abc(char  *def, unsigned int w, unsigned int x, unsigned int y, unsigned int z)
{
   printf("val 1 : %d\n", w);
   printf("val 2 : %d\n", x);
   printf("val 3 : %d\n", y);
   printf("val 4 : %d\n", z);
}
Run Code Online (Sandbox Code Playgroud)

这是我调用此函数的地方:

unsigned int exp[4] = { 1, 2, 3, 4 };
unsigned short count = 0;
abc(anyarray, exp[count++], exp[count++], exp[count++], exp[count++]);
Run Code Online (Sandbox Code Playgroud)

这是我期望的输出:

val1 : 1
val2 : 2
val3 : 3
val4 : 4
Run Code Online (Sandbox Code Playgroud)

但我得到的完全相反:

val1 : 4
val2 : 3
val3 : 2
val4 : 1
Run Code Online (Sandbox Code Playgroud)

我不知道为什么?任何帮助,将不胜感激.

lia*_*iaK 8

从标准文档,5.4

除非另有说明,否则单个运算符的操作数和各个表达式的子表达式的评估顺序以及副作用发生的顺序是未指定的.58)在前一个和下一个序列点之间,标量对象的存储值最多应修改一次通过表达式的评价.此外,只能访问先前值以确定要存储的值.对于完整表达式的子表达式的每个允许排序,应满足本段的要求; 否则行为未定义.

标准文档本身的一个例子,

i = v[i ++]; / / the behavior is undefined

这也是出于同样的原因

abc(anyarray, exp[count++], exp[count++], exp[count++], exp[count++]); 未定义..