#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
在根据运算法则