带参宏问题

elan520 2002-04-09 09:25:47
请问我的这个程序有没有错?#define pr(ar) printf("%d,",ar)
void main()
{
int j;
int a[]={1,3,5,7,9,11,13,15};
int *p=a+5;
for (j=3;j;j--)
switch(j)
{ case 1:
case 2:pr(*p++);break;
case 3:pr(*(--p));
}
}

...全文
87 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
elan520 2002-04-09
  • 打赏
  • 举报
回复
对了,我就是少了这个东东:#include <stdio.h>

谢了!
LionEagle 2002-04-09
  • 打赏
  • 举报
回复
#include <stdio.h>
LLnju 2002-04-09
  • 打赏
  • 举报
回复
#include <cstdio>
elan520 2002-04-09
  • 打赏
  • 举报
回复
没有啊,我这里的提示是:
case 2:pr(*p++);break

error C2065: 'printf' : undeclared identifier

我看来看去都不懂那里出错!



poly30 2002-04-09
  • 打赏
  • 举报
回复


你是否在调试的时候敲入原程序的时候少敲了一个符号

仔细检查一下
poly30 2002-04-09
  • 打赏
  • 举报
回复
To: elan520()

你用的什么编译器

我是用vc 6 给你调的

调试结果我已经在上面给你列出
匿名用户12345 2002-04-09
  • 打赏
  • 举报
回复
又来晚了,希望能分点分好么?

当j 第一次循环时,等于3。则p 减一,指向9。

然后把p指向的值传到宏,打印9

j第二次循环时,等于2,由于是p++,所以先引用p的值,所以还是9,此时p指向11。

j第三次循环时,等与1,你这里没有写操作,我不太清楚。不过既然楼上说调试过以后为11,那可能是顺序执行的case2了。

然后 j==0,循环结束。够详细了吧,给点分吧
elan520 2002-04-09
  • 打赏
  • 举报
回复
可我调试的时候编译器说出错,就是那个pr 说是没有定义的表识符,是怎么回事啊?
poly30 2002-04-09
  • 打赏
  • 举报
回复



宏得定义是没有错得

调试得9 ,9,11

case 1
case 2:

得出得就是两次9

程序完全正确
lightning 2002-04-09
  • 打赏
  • 举报
回复
right
xiaolun 2002-04-09
  • 打赏
  • 举报
回复
没错

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧