#include<stdio.h>
#define max(a) ((++a)*(++a)*(++a))
main(){
int a=5;
printf("%d\n",max(a));
printf("%d",a); }
这应该返回6 * 7 * 8但它返回7 * 7 * 8为什么?
答案 0 :(得分:3)
标准表示如果在序列点之间多次修改变量,则会得到未定义的行为。这就是你所做的,所以这就是你得到的。
请注意:
1)除了在计算参数(++ a)后进行操作(乘法)之外,你对(++a)*(++a)*(++a)
评估的顺序没有任何承诺。
2)明确不允许在序列点之间多次修改同一个变量。