宏和多行注释

时间:2012-07-30 12:51:17

标签: c++ macros

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

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

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

4 个答案:

答案 0 :(得分:7)

您无法通过以下推理来执行此操作。我们假设 是可能的。

因此,您创建了一个用/*替换自己的宏,并为*/创建了另一个宏。那么会发生什么?首先,从代码中删除注释。之后,预处理器用注释替换您的宏。之后,编译器会窒息:它不知道如何处理/**/,因为它根本不会面对这样的事情:评论始终删除之前编译,所以它甚至不知道什么是“评论”。它可能会认为它是一个除法,然后是乘法。

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

答案 1 :(得分:4)

评论处理在宏扩展之前发生:

  

     

2.2翻译阶段[lex.phases]

     

1 - 翻译语法规则的优先顺序由以下阶段指定。 [...]
  3. [...]每个评论由一个空格字符替换。 [...]
  4.执行预处理指令,扩展宏调用[...]

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

答案 2 :(得分:2)

  

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

它无法正常工作。您#define C_BEGIN中的评论不属于您的宏定义,也不属于您的宏定义的一部分。就语言而言,#define C_END不是宏定义。它只是该多行评论的一部分。换句话说,它是空白。在预处理器/编译器进入解释宏定义的阶段之前,将处理注释(变为空白)。

答案 3 :(得分:0)

如果您使用的是IDE,只需按 ctrl / for Windows或 command / on苹果电脑。您应该首先选择要评论的行。