记住宏定义就是傻瓜式的直接替换。
第一次循环 PR(1);print("ok!") 。PR(1)直接打印1(后面还有个\t,默认8个空格),所以是1 ok!。其它以此类推。
所以输出为:1 ok!2 ok!3 ok!
更正。。。。
输出结果为:1 2 3 ok!
替换就行了,替换掉PR(a),PRINT(a)printf(%6d\t,(int)(a));printf('ok!”);
在替换掉PRINT(a),就是
intmain()
{ inti,a=1;
for(I=0;I<3;I++)
printf(%6d\t,(int)(a+i));
printf('ok!”);
printf('\n”);
return 0;
}
#define PRINT(a) printf("%d\t", (int)(a)); printf("ok!")
PRINT(a + i); ==> printf("%d\t", (int)(a + i)); printf("ok!");
#include<stdio.h>
#define PR(a) printf("%d\t", (int)(a))
#define PRINT(a) PR(a); printf("ok!")
int main()
{
int i, a = 1;
for (i = 0; i < 3; i++)
PRINT(a + i);//==> printf("%d\t", (int)(a + i)); printf("ok!");
printf("\n");
return 0;
}
输出:for()和第一个分号结合,所以前面只输出1 2 3 ,最后退出for()循环时执行 printf("ok!");
//1 2 3 ok!
因为宏定义会以字符串的形式替换到代码中,代码中分割语句必须用分号啊,你替换了两个语句,这两个语句必须要加分号,才能保证替换以后代码用分号隔开语句