原创 网络上的两个C语言宏问题

2009-6-19 09:21 2418 3 3 分类: MCU/ 嵌入式
请教两个c语言问题:

标签: 请教,  两个,  c语言

一.#define pr(ar) printf("%d",ar);
main()
{ int j,a[]={1,3,5,7,9,11,13,15},i=5;
for(j=3;j;j--)
{ switch(j)
{ case 1:
case 2:pr(a[i++]);break;
case 3:pr(a[--i]);
}
}
}
1.请问 for(j=3;j;j--) 中间的那个“j”有何作用,我把它去掉则 变成了死循环,这是为何?
2.程序的结果为“9911”,谁能解释一下为何会输出“11“?
3.第一行输出语句的封号是否可有可无?

二.#define pr(a) printf("%d\t",(int)(a));
#define print(a) pr(a);printf("ok");
main()
{ int i,a=1;
for(i=0;i<3;i++)
print(a+i);

}
程序输出结果为”1 2 3 ok“ 若把第二句改为”#define print(a) { pr(a);printf("ok"); }“结果为”1 ok2 ok3 ok“
为何不改的结果只在最后输出一个”ok“?



    回答:1  人气:6  解决时间:2008-06-05 15:47















1.j是为了退出循环而设置的,当j减到0时,条件不成立,退出for,如果去掉,变成无限循环.
2.如果你自己99是怎么得到的,那你也应该知道11就是a[5]=11.
3.在这种情况下可有可无,但有些情况就不可以加,例如定义的是个数值的时候.



for(i=0;i<3;i++)
pr(a);printf("ok");
这样是没括号的,for要先循环完pr(a)之后才执行printf("ok");
如果就要两个都执行了:
for(i=0;i<3;i++)
{pr(a);printf("ok");}
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /3 下一条