我想定义下面这个普通的宏:
#define MY_ENUM enum MyEnum{ \
myVal0, \ //Describes this situation
myVal2 \ //Describes that situation
}
令我惊讶的是,这个代码由于“error: stray ‘\’ in program”的原因而无法工作。即使在反斜杠后面加上一些空格,也会导致“warning: backslash and newline separated by space”。正如这个答案所指出的那样,反斜杠必须是行末的字符。这个答案指出,在处理注释之前会进行行拼接。选择这种顺序的原因对我来说完全没有意义;我唯一能想象到的原因是允许类似下面的多行注释:
//This is a comment which \
follows in the next line
这看起来非常危险,因为这样的话在尝试时可能会吞掉下一行上的任何代码。相反的顺序,即在拼接行之前用单个空格替换每个注释,听起来对我来说更明智。有人能解释一下为什么做出这个选择吗?
我可以通过以下方式解决我的原始问题:
#define MY_ENUM enum MyEnum{ \
myVal1, /*Describes this situation*/ \
myVal2 /*Describes that situation*/ \
}
我做这个笨拙的枚举宏定义的目的是,这个宏必须在c++和c之间共享(由于Qt,它绝对必须是一个类成员)。在我看来,定义这样的宏似乎是唯一的解决方案,但上述解决方法看起来很丑陋,我绝对不想让枚举没有注释。我是否错误地解决了这个问题?
/*...*/
注释。 - Pete Becker-/*abc*/-a
和- -a
的代码是相同的,而不是--a
。 - chux - Reinstate Monica