宏定义
#define f(x)x*xmain()
{
int a=6, b=2, c;
c=f(a)/f(b);
printf("%d \n", c);
}
为什么输出结果是36不是9?
谢谢 又一个被宏害了的……
把宏改成#define f(x) ((x)*(x))就可以了。 至于原因嘛,宏真的就只是替换,你的代码替换过后就变成了:#define f(x)x*x
main()
{
int a=6, b=2, c;
c=a*a/b*b;
printf("%d \n", c);
}而你想要的是#define f(x)x*x
main()
{
int a=6, b=2, c;
c=(a*a)/(b*b);
printf("%d \n", c);
}运算顺序不同了,结果就不同了。 如果有条件用 C++ 编译器的话,建议用 inline 或 constexpr 函数。 给个最佳吧{:10_266:}答题不易啊{:10_266:} 你加上的宏定义运算顺序就是6*6/2*2=36;(左往右运算)
你在x*x两边加上括号就好了 宏定义本质就是文本替换,你的f(x)会被替换成x*x,
所以你连起来运算的时候也就出现了结果不理解(即为a*a/b*b 而并非期待的 (a*a)/(b*b)),
另外建议学习一下DEBUG,遇到不理解的自己一步一步的去调试。 https://s1.ax1x.com/2020/07/05/UpAthV.gif
页:
[1]