带参数的宏的原则

一下是一个错误的示例:

#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))

当然也可以组合(嵌套) 其他宏。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值