Ayb*_*gür 6 c c++ gcc g++ c-preprocessor
我想定义以下普通的宏:
#define MY_ENUM enum MyEnum{ \
myVal0, \ //Describes this situation
myVal2 \ //Describes that situation
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,这不起作用error: stray ‘\’ in program
.反斜杠导致后甚至是一些空格warning: backslash and newline separated by space
.正如这个答案所指出的那样,反斜杠必须是该行的最后一个字符.这个答案指出在处理注释之前会发生行拼接.之所以选择这个订单,对我来说绝对没有意义; 我可以想象这样做的唯一原因是允许多行评论,如下所示:
//This is a comment which \
follows in the next line
Run Code Online (Sandbox Code Playgroud)
这看起来非常危险,因为这样的事情可能只会吞噬下一行中的任何代码.相反的顺序,即在拼接线之前用单个空格替换每个注释听起来像是一个更明智的选择.有人可以解释为什么做出这个选择吗?
我可以通过以下方法解决原始问题:
#define MY_ENUM enum MyEnum{ \
myVal1, /*Describes this situation*/ \
myVal2 /*Describes that situation*/ \
}
Run Code Online (Sandbox Code Playgroud)
我做这个笨拙的枚举宏定义的目的是这个宏必须在c ++(由于Qt绝对必须是一个类成员)和c之间共享.定义一个这样的宏看起来像是我的唯一解决方案,但上面的解决方案看起来很难看,我绝对不想让枚举取消注释.我接近这个问题了吗?
问题是 C 预处理器只是在\\
命中并继续时添加另一个行结束字符。
在//
评论中你不能这样做。不接受该\\
角色继续评论(无论如何,它应该显示为一行)。
解决办法是\xe2\x80\x94你自己发现\xe2\x80\x94使用/* */
注释风格。
归档时间: |
|
查看次数: |
476 次 |
最近记录: |