免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1725 | 回复: 9
打印 上一主题 下一主题

关于宏代码? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-07-13 11:42 |只看该作者 |倒序浏览
代码如下:
a.c
#include<string.h>;
#include<sys/time.h>;
#define checkflag(flag,msg) if(flag<0) {strcpy(buf_msg,msg); goto l_sqlerror; }
int main(int argc,char** argv)
{
char buf_msg[20];
int abc=-10;
checkflag(abc,"aaaaaaaaaa";
printf("the abc is %d\n",abc);
l_sqlerror:
printf("%s\n",buf_msg);
return 0;
}
输出:
aaaaaaaaaa

而在函数里面

..................................
#define checkflag(flag,msg) if(flag<0) {strcpy(s.msg,msg); goto l_sqlerror; }
int f_proc_tel1_hr23()
{
.......................
doFlag=...................................
checkflag(doFlag,"..........................出错";
................................
}
makelib时出错???说Syntax error: "name" was expected but ""..........................出错"" was found
而当你定义一个
char msg[20];
................
checkflag(doFlag,msg);
..............
再编译不会报错?为什么??

论坛徽章:
0
2 [报告]
发表于 2004-07-13 11:52 |只看该作者

关于宏代码?

你的点太多了,看不出问题所在。

论坛徽章:
0
3 [报告]
发表于 2004-07-13 12:07 |只看该作者

关于宏代码?

#define checkflag(flag,msg) if(flag<0) {strcpy(s.msg,msg); goto l_sqlerror; }

你这个宏有问题吧? s.msg 是什么?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2004-07-13 12:50 |只看该作者

关于宏代码?

s.msg 中的 msg 被扩展了。

论坛徽章:
0
5 [报告]
发表于 2004-07-13 13:19 |只看该作者

关于宏代码?

以下代码能正确运行
#include<string.h>;
#include<sys/time.h>;
struct sys
        {
           char msg[100];  
        };

#define  amsg s.msg
#define checkflag(flag,msg) if(flag<0) {strcpy(amsg,msg); goto l_sqlerror; }
int test();
int main(int argc,char** argv)
{
     test();
     return 0;     
}
int test()
{
   struct sys s;
   int abc=-10;
   checkflag(abc,"aaaaaaaaaa";
   printf("the abc is %d\n",abc);
   
l_sqlerror:
   printf("%s\n",amsg);
   return 0;
}
这样就不可以了
#define checkflag(flag,msg) if(flag<0) {strcpy(s.msg,msg); goto l_sqlerror; }
s.mag和amsg????不懂

论坛徽章:
0
6 [报告]
发表于 2004-07-13 13:41 |只看该作者

关于宏代码?

可能因为你的s.msg中的msg也被替换成abc了,这就错了。没试过,不保证。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-07-13 14:18 |只看该作者

关于宏代码?

你把你预编译过的程序输出,
就知道为什么了。
对宏没有足够的把握,不要乱用。

论坛徽章:
0
8 [报告]
发表于 2004-07-13 15:41 |只看该作者

关于宏代码?

原帖由 "lenovo" 发表:
你把你预编译过的程序输出,
就知道为什么了。

老大,什么输出预编译后的程序?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2004-07-13 16:15 |只看该作者

关于宏代码?

[quote]原帖由 "soloarrow"]老大,什么输出预编译后的程序?[/quote 发表:

gcc -E foo.c

论坛徽章:
0
10 [报告]
发表于 2004-07-13 17:19 |只看该作者

关于宏代码?

哦 这样了???谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP