无法理解c语言中宏中的inc / dec运算符行为

时间:2013-12-11 08:32:28

标签: c++ c macros

#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为什么?

1 个答案:

答案 0 :(得分:3)

标准表示如果在序列点之间多次修改变量,则会得到未定义的行为。这就是你所做的,所以这就是你得到的。

请注意:

1)除了在计算参数(++ a)后进行操作(乘法)之外,你对(++a)*(++a)*(++a)评估的顺序没有任何承诺。

2)明确不允许在序列点之间多次修改同一个变量。