新手求解,GCC编译不通过,自己看不出问题

asura1995 2014-10-30 11:59:16
RT,
#include <stdio.h>
#include <stdlib.h>
#define MALLOC (p, s) \
if(!((p)=malloc(s))) \
{ \
fprintf(stderr,"Insufficient Memory");\
exit(EXIT FAILURE); \
}
int main()
{
int i, *pi;
float f, *pf;
MALLOC (pi, sizeof(int));
MALLOC (pf, sizeof(float));
*pi=1024;
*pf=3.14;
printf("an integer = %d, a float = %f\n", *pi, *pf);
free(pi);
free(pf);
return 0;
}
GCC 报错如下:
1-1.c: 在函数‘main’中:
1-1.c:3:18: 错误:‘p’未声明(在此函数内第一次使用)
#define MALLOC (p, s) \
^
1-1.c:13:2: 附注:in expansion of macro ‘MALLOC’
MALLOC (pi, sizeof(int));
^
1-1.c:3:18: 附注:每个未声明的标识符在其出现的函数内只报告一次
#define MALLOC (p, s) \
^
1-1.c:13:2: 附注:in expansion of macro ‘MALLOC’
MALLOC (pi, sizeof(int));
^
1-1.c:3:21: 错误:‘s’未声明(在此函数内第一次使用)
#define MALLOC (p, s) \
^
1-1.c:13:2: 附注:in expansion of macro ‘MALLOC’
MALLOC (pi, sizeof(int));
^
1-1.c:4:3: 错误:expected expression before ‘if’
(if(!((p)=malloc(s))) \
^
1-1.c:13:2: 附注:in expansion of macro ‘MALLOC’
MALLOC (pi, sizeof(int));
^
1-1.c:4:3: 错误:expected expression before ‘if’
(if(!((p)=malloc(s))) \
^
1-1.c:14:2: 附注:in expansion of macro ‘MALLOC’
MALLOC (pf, sizeof(float));
...全文
141 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-11-03
  • 打赏
  • 举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
asura1995 2014-10-31
  • 打赏
  • 举报
回复
引用 1 楼 brookmill 的回复:
#define MALLOC (p, s) \ MALLOC和括号要连着写,中间不能有空格 exit(EXIT FAILURE); \ 应该是EXIT_FAILURE
感谢!gcc编译通过了。。 之前看的是谭浩强的书,没有讲到宏语句可以这样用= =。。现在看一本数据结构与算法,感到一片茫然。。 谢谢咯!
brookmill 2014-10-31
  • 打赏
  • 举报
回复
引用 3 楼 asura1995 的回复:
[quote=引用 1 楼 brookmill 的回复:] #define MALLOC (p, s) \ MALLOC和括号要连着写,中间不能有空格 exit(EXIT FAILURE); \ 应该是EXIT_FAILURE
感谢!gcc编译通过了。。 之前看的是谭浩强的书,没有讲到宏语句可以这样用= =。。现在看一本数据结构与算法,感到一片茫然。。 谢谢咯![/quote] 刚看书的时候都会有点茫然,我一般就是硬着头皮看,翻来覆去看几遍之后,不知道怎么突然就懂了,然后就觉得很简单,然后就想不通为什么开始看不明白。
brookmill 2014-10-31
  • 打赏
  • 举报
回复
楼主的代码实际上是定义了一个没有参数的宏MALLOC 用gcc -E test.c可以看预处理的结果。
brookmill 2014-10-31
  • 打赏
  • 举报
回复
#define MALLOC (p, s) \ MALLOC和括号要连着写,中间不能有空格 exit(EXIT FAILURE); \ 应该是EXIT_FAILURE

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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