关于宏定义的问题 求大牛 解答

#include

#define PT 5.5
#define S(x) PT*x*x

int main(int argc, char const *argv[])
{

int a=1,b=2;
printf("%4.1f\n",S(a+b) );
return 0;

}

因为你的宏没有用括号,导致展开的时候运算跟你想象的不一样。

 5.5 * 1+2 * 1+2

要想计算面积,应该用括号

#define S(x) PT*(x)*(x)

宏展开之后就是——
5.5 * 1+2 * 1+2。根据乘法与加法优先级,其实就是:(5.5 * 1) + (2 * 1) + 2 = 9.5。

第二个宏定义没有加括号

第二个宏定义没有加括号,就不需要考虑运算优先级,5.5 * 1)+ 2 * 1+ 2 = 9.5
如果加(),即PT*(X)*(X),则结果为:5.5*(1+2)*(1+2)=49.5

先参数带人化 5.5 * 1+2 * 1+2
在根据运算法则