当前位置: 代码迷 >> 综合 >> #define SQUARE(a)((a)*(a))
  详细解决方案

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

热度:96   发布时间:2023-12-13 12:33:00.0
#include <stdio.h>
#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说明你的编译器采用了前面那种方式罢了。

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

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


  相关解决方案