宏和多行注释(Macros and multi-line comments)

2019-09-20 10:34发布

我需要有一个宏组内的多行注释,这样的一个宏发起的注释块,另一个结论,就像这样:

#define C_BEGIN /*
#define C_END */
... other macros

但是果然,这种做法是行不通的。

Answer 1:

不能为以下理由这样做。 让我们假设它可能的。

所以,你创建了一个宏,用自身替换/* ,另一个用于*/ 。 然后会发生什么? 首先,意见从代码中删除。 在此之后,预处理器替换与评论中的宏。 在此之后,编译器会呛:它不知道做什么用/**/因为它根本不会面临这样的事情:在注释编译之前总是删除,所以它甚至不知道什么是“评论“是。 它可能会认为这是一个分工其次是乘法。

因此,我们的假设是错误的,你不能做到这一点。



Answer 2:

宏膨胀前评论处理发生的情况:

C ++ 11

翻译的2.2相[lex.phases]

1 - 翻译的语法规则中的优先级是由以下几个阶段编SPECI网络连接。 [...]
3. [...]每个注释都被一个空格字符替代。 [...]
4.预处理指令被执行时,宏调用扩展[...]

也许你可以尝试预处理源文件两次? (注:不这样做。)



Answer 3:

但是果然,这种做法是行不通的。

它不能正常工作。 在您的评论#define C_BEGIN不是的一部分,不能成为你的宏定义的一部分。 至于语言方面,您#define C_END不是宏定义。 它只是一个是多行注释的一部分。 换句话说,它是空白。 评论被处理(变成空白)预处理器/编译器获取到您解读宏定义的阶段之前。



Answer 4:

如果您使用的是IDE,你可以简单地按ctrl / for Windows或命令 / Mac上。 你应该选择你想第一个留言的线路。



文章来源: Macros and multi-line comments
标签: c++ macros