一下是一个错误的示例:
#include<stdio.h>
#define RADTODEG1(x) (x*57.29578)
#define RADTODEG2(x) (x)*57.29578
int main(int atgc, char const* argv[])
{
printf("%f\n", RADTODEG1(5 + 2));
printf("%f\n", 180/RADTODEG2(1));
return 0;
}
经计算其结果应该为:57.3左右与3.2左右。
但是如图,程序的输出结果却与预期结果大相径庭,其实两步计算的具体式子如下:
5+2*57.29578;
180/1*57.9578。
此时计算机是按照先乘除后加减或先计算180/1,在用其结果去*57.9578,显然这样的计算方式并不符合我们的要求,因此我们必须按照以下原则定义宏。
带参数宏的原则:
整个值都要有括号,每个函数出现的地方都要有括号,如下:
#define RADTODEG(x) ((x)*57.29578)
另外,带参数的宏也可以带多个参数,如:
#define MIN(a,b) ((a)>(b)?(b):(a))
当然也可以组合(嵌套) 其他宏。