| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 712 人关注过本帖
标题:关于给宏注释的问题
只看楼主 加入收藏
盆中线
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-6
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
关于给宏注释的问题
我定义个宏
#define  TRY(OP)\
    out<<"c1 = ";\
    c1.print(out);\
    out<<",c2=";\
    c2.print(out);\
    out<<";c1"#OP"c2 produces";\当我给这行注释时,就是简单的“//?”时,编译器就会报错,报三个错,错误为:1>f:\visual studio 2008\projects
                                                   \operatoroverloading\operatoroverloading\integertest.cpp(16) : error C2146: 语法错误 : 缺少“)”(在标识
                                                                                                                                           符“OP”的前面)

                                                    1>f:\visual studio 2008\projects\operatoroverloading\operatoroverloading\integertest.cpp(16) : error C2059: 语
                                                                                                                                                     法错误 : “)”

                                                    1>f:\visual studio 2008\projects\operatoroverloading\operatoroverloading\integertest.cpp(18) : error C2017: 非
                                                                                                                                           法的转义序列

    (c1 OP c2).print(out);\
    out<<endl;
为什么呢???
搜索更多相关主题的帖子: 注释 
2009-09-19 18:13
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:10 
首先得建议一下,不要使用这样复杂的宏,没有任何的好处。
“\”符号的意思是将其后面的字符和之前的字符行连成一行,也就是说如果展开宏的话,它只有一行。
这时如果在符号“\”后面加上了注释,就把注释加入了这一行,下面的就没有加入,编译器对
(c1 OP c2).print(out);\
    out<<endl;
这样的语句就无法识别,它被抛弃出了这个宏
如果在注释的最后再加一个“\”,这样当然是可以将下面的行加入,但“//”是行注释,前面我们已经知道宏只有一行,那么后面的代码同样也被注释掉了,就不是原本想要的,这时就只好使用段注释“/* ... */\”,这后面加了一个"\"同样也是为了将后面的代码加入这一行。这一行的正确写法是:
cout<<";c1"#OP"c2 produces";/*...*/\
就是将行连接符放到最后,同一行中,不要出现两个行连接符
检查这个问题只要这样做:看到“\”符号,就去掉它,与前面的合并,与前面的保持在同一行,很快就发法问题。
最后还是得建议,不要使用复杂的宏,写这样的代码,时间长了连自己都看不懂,更别说让别人看了。


2009-09-20 12:39
盆中线
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-6
收藏
得分:0 
回复 2楼 debroa723
太透彻了,谢谢!!!
2009-09-20 13:51
盆中线
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-6
收藏
得分:0 
回复 2楼 debroa723
再问个问题,为什么同一行不能用连个连接符呢?
我刚编译了一次,确实是不能。。但是不明白为什么不能。。。
2009-09-20 13:59
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
行连接只能在最后,“\”在C中还有一个意思,就是转义,如果它的后出现字符,就当成是转义用,否则当成行连接符。
而转义字符是有限定的,错误的转义被当成非法的转义语句,不被编译器认可。
2009-09-20 17:34
forclwy
Rank: 4
等 级:业余侠客
帖 子:167
专家分:255
注 册:2008-10-21
收藏
得分:0 
学习了
2009-09-20 18:31
盆中线
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-6
收藏
得分:0 
学习了,这些字符的意思,以前从来就没认真过,这下看来,真的要好好的注意了
2009-09-20 20:21
快速回复:关于给宏注释的问题
数据加载中...
 
   



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

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