#define SQUARE(a)((a)*(a))

时间:2025-05-09 08:58:09
#include <>
#define SQUARE(a)((a)*(a))
main(){
int a=5;
int b=SQUARE(a++);
printf("%d",b);
getch();
}

结果是25,我怎么觉得应该是30啊?


经过预处理器处理后,代码变成了
int b = (a++)*(a++);也就是下面那个代码的形式,
而C标准并未规定编译器在一个表达式中何时进行自增运算,故结果可能是5*5(先把a取出,最后进行两次自增),也可能是(5*6)(先取出第一个a,自增后取出第二个a),输出25说明你的编译器采用了前面那种方式罢了。

所以建议不要在同一个表达式中对同一变量施行多次自增运算

一个表达式中多个自增运算与编译器有关。