先看例子:
#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);}
而且比循环语句减少了判断。