#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说明你的编译器采用了前面那种方式罢了。
所以建议不要在同一个表达式中对同一变量施行多次自增运算
一个表达式中多个自增运算与编译器有关。
本文通过一个具体的C语言代码示例解释了宏定义的工作原理及其可能导致的意外行为,特别是当宏应用于自增运算时的情况。文章指出,在同一表达式中对同一变量进行多次自增运算可能会导致不可预测的结果,并依赖于特定编译器的行为。
2262

被折叠的 条评论
为什么被折叠?



