最后一个宏定义的分号什么意思啊,不理解,导致这题不知道怎么运算,精讲一下

img

img

记住宏定义就是傻瓜式的直接替换。
第一次循环 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!

因为宏定义会以字符串的形式替换到代码中,代码中分割语句必须用分号啊,你替换了两个语句,这两个语句必须要加分号,才能保证替换以后代码用分号隔开语句