标题:关于宏定义中的一点问题
只看楼主
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
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:5 
/*宏定义中允许包含两道以上命令的情形,此时必须在最右边加上
这个注释挪到#define exchange( 的前面好读点

我行我乐
我的博客:
http://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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-421975-1-1.html




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

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