宏模拟循环

先看例子:

#define A(x) x;x;x;x;x;x;x;x;x;x

void main()

{

  int n=1;

  A(A(printf("%d ",n++)));
}

打印值:1,2,3,4...100

为什么呢?

首先要理解,宏的原理。宏是为了简化编程,用来替代一系列预定义指令,是程序中常用的一种方法。

那么如何展开?看上面的例子,首先宏中的参数是A(printf("%d ",n++)),所以需要将参数代入,得到10个A(printf("%d ",n++)),发现此时参数依然为宏,需要再展开,得到100个printf("%d ",n++),此时没有可展开的宏因子了,开始计算,得到1,2,3,4,5...100.

通过上例,是不是可以看作循环语句呢?实际上就相当于 for(int i=1;i<101;i++){printf("%d ",i);}

而且比循环语句减少了判断。

 

转载于:https://www.cnblogs.com/273809717/archive/2012/12/24/2831352.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值