宏模拟循环

先看例子:

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

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

 

posted @ 2012-12-24 17:25  da  阅读(207)  评论(0编辑  收藏  举报