#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说明你的编译器采用了前面那种方式罢了。
所以建议不要在同一个表达式中对同一变量施行多次自增运算
一个表达式中多个自增运算与编译器有关。