我需要有一个宏组内的多行注释,这样的一个宏发起的注释块,另一个结论,就像这样:
#define C_BEGIN /*
#define C_END */
... other macros
但是果然,这种做法是行不通的。
我需要有一个宏组内的多行注释,这样的一个宏发起的注释块,另一个结论,就像这样:
#define C_BEGIN /*
#define C_END */
... other macros
但是果然,这种做法是行不通的。
不能为以下理由这样做。 让我们假设它是可能的。
所以,你创建了一个宏,用自身替换/*
,另一个用于*/
。 然后会发生什么? 首先,意见从代码中删除。 在此之后,预处理器替换与评论中的宏。 在此之后,编译器会呛:它不知道做什么用/*
和*/
因为它根本不会面临这样的事情:在注释编译之前总是删除,所以它甚至不知道什么是“评论“是。 它可能会认为这是一个分工其次是乘法。
因此,我们的假设是错误的,你不能做到这一点。
宏膨胀前评论处理发生的情况:
C ++ 11
翻译的2.2相[lex.phases]
1 - 翻译的语法规则中的优先级是由以下几个阶段编SPECI网络连接。 [...]
3. [...]每个注释都被一个空格字符替代。 [...]
4.预处理指令被执行时,宏调用扩展[...]
也许你可以尝试预处理源文件两次? (注:不这样做。)
但是果然,这种做法是行不通的。
它不能正常工作。 在您的评论#define C_BEGIN
不是的一部分,不能成为你的宏定义的一部分。 至于语言方面,您#define C_END
不是宏定义。 它只是一个是多行注释的一部分。 换句话说,它是空白。 评论被处理(变成空白)预处理器/编译器获取到您解读宏定义的阶段之前。
如果您使用的是IDE,你可以简单地按ctrl / for Windows或命令 / Mac上。 你应该选择你想第一个留言的线路。