| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 701 人关注过本帖
标题:关于宏定义中的一点问题
只看楼主 加入收藏
WAACM
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2013-4-15
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:8 
关于宏定义中的一点问题
下面是我直接按照别人的来写的,可是一直提示下面的错误,不明白为什么,有大神可以帮忙给指点一下吗?不胜感激!
#include <stdio.h>
#define exchange(a,b)\
{\
    /*宏定义中允许包含两道以上命令的情形,此时必须在最右边加上“\”*/
    int t;\
    t=a;\
    b=a;\
    t=b;\
}
int main(int argc, char *argv[])
{
    int x=10;
    int y=20;
    printf("x=%d; y=%d",x,y);
    exchange(x,y);
    printf("x=%d;y=%d",x,y);
    return 0;
}

--------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------

检查文件依赖性...
正在编译 D:\Program Files\C-Free 5\appdata\samples\047.cpp...
[Error] D:\Program Files\C-Free 5\appdata\samples\047.cpp:5: error: expected constructor, destructor, or type conversion before '=' token
[Error] D:\Program Files\C-Free 5\appdata\samples\047.cpp:5: error: expected constructor, destructor, or type conversion before '=' token
[Error] D:\Program Files\C-Free 5\appdata\samples\047.cpp:5: error: expected constructor, destructor, or type conversion before '=' token
[Error] D:\Program Files\C-Free 5\appdata\samples\047.cpp:5: error: expected declaration before '}' token

构建中止 047: 4 个错误, 0 个警告
搜索更多相关主题的帖子: exchange 不胜感激 include return 编译器 
2013-10-16 09:48
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:5 
完全不符合宏定义的规则.
第一,不要"{""}",
第二,不要定义int t,
第三,用逗号,不要用分号分隔表达式.
第四,注译那一行末尾没有加"\",
第五,宏定义最后不要加";" ",".
第六,建议在新行开头不要有空隔, 因为空隔也算在宏定义中.
修改如下:
#include <stdio.h>
#define exchange(a,b,t) \
 /*宏定义中允许包含两道以上命令的情形,此时必须在最右边加上“\”*/ \
t=a,\
b=a,\
t=b
int main(int argc, char *argv[])
{
    int x=10;
    int y=20;
    int t;
    printf("x=%d; y=%d",x,y);
    exchange(x,y,t);
    printf("x=%d;y=%d",x,y);
    return 0;
}
2013-10-16 10:34
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:5 
在注释后加\就可以了。define把exchange部分换成定义的。
程序代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
    int x=10;
    int y=20;
    printf("x=%d; y=%d",x,y);
    {\
    /*宏定义中允许包含两道以上命令的情形,此时必须在最右边加上“\”*/ \
    int t;\
    t=x;\
    y=x;\
    t=y;\
};
    printf("x=%d;y=%d",x,y);
    return 0;
}
这是等价后的。


好好学习,天天想上
2013-10-16 12:05
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:5 
/*宏定义中允许包含两道以上命令的情形,此时必须在最右边加上
这个注释挪到#define exchange( 的前面好读点

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-10-16 12:20
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
没有2楼说的那么麻烦,只是少了个"\"。这种宏定义很常见,用int t很正常的。
#define exchange(a,b)\
{\
    /*宏定义中允许包含两道以上命令的情形,此时必须在最右边加上“\”*/\
    int t;\
    t=a;\
    b=a;\
    t=b;\
}
但是功能不是实现是因为
    t=a;\
    b=a;\
    t=b;\
不对,应该是
    t=a;\
    a=b;\
    b=t;\

[ 本帖最后由 embed_xuel 于 2013-10-16 12:50 编辑 ]

总有那身价贱的人给作业贴回复完整的代码
2013-10-16 12:25
WAACM
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2013-4-15
收藏
得分:0 
回复 2楼 pangshch
小的初学没多久,挺菜的,见谅呢,以后会注意的,O(∩_∩)O谢谢
2013-11-06 08:07
WAACM
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2013-4-15
收藏
得分:0 
回复 3楼 zhaogay
嗯嗯,这样倒是没问题,就是当时是想着学习那个宏定义来着,(*^__^*) 嘻嘻……O(∩_∩)O谢谢
2013-11-06 08:08
WAACM
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2013-4-15
收藏
得分:0 
回复 4楼 yuccn
Soga,嗯.....这个当时是直接按照别人写的一个程序来编的,不明觉厉,赶脚没什么错,但还是报错,就来问问各位大神了,O(∩_∩)O谢谢呢
2013-11-06 08:09
WAACM
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2013-4-15
收藏
得分:0 
回复 5楼 embed_xuel
嗯,行的,试试,学习了,(*^__^*) 嘻嘻……谢谢大神的回复!
2013-11-06 08:10
快速回复:关于宏定义中的一点问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020570 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved