宏和多行注释

Mil*_*hes 2 c++ macros

我需要在一组宏中包含多行注释,以便其中一个宏启动注释块而另一个宏结束它,如下所示:

#define C_BEGIN /*
#define C_END */
... other macros
Run Code Online (Sandbox Code Playgroud)

但果然,这种方法不起作用.

Sin*_*all 7

你不能通过以下推理来做到这一点.我们假设它可能的.

所以你创建了一个替换自己的宏,/*另一个用于替换*/.那么会发生什么?首先,从代码中删除注释.之后,预处理器用注释替换您的宏.在此之后,编译器会呛:它不知道该怎么做/*,并*/因为它根本不会面临这样的事情:这些评论总是在编译之前删除,所以它甚至不知道什么是"评论"是.它可能会认为它是一个除法,然后是乘法.

所以我们的假设是错误的,你不能这样做.


eca*_*mur 5

注释处理发生在宏扩展之前:

\n\n
\n

\n\n

2.2 翻译阶段 [lex.phases]

\n\n

1 - 翻译语法规则中的优先级由以下阶段指定。[...]
\n 3. [...] 每个注释都被一个空格字符替换。[...]
\n 4. 执行预处理指令,扩展宏调用 [...]

\n
\n\n

也许您可以尝试对源文件进行两次预处理?(注意:不要这样做。)

\n