宏和多行注释

Macros and multi-line comments

本文关键字:多行注释      更新时间:2023-10-16

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

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

但可以肯定的是,这种方法是行不通的。

由于以下原因,您不能这样做。让我们假设可能的。

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

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

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

c++11

2.2翻译阶段[法律阶段]

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

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

但可以肯定的是,这种方法是行不通的。

它不起作用。#define C_BEGIN中的注释不是,也不能是宏定义的一部分。就语言而言,#define C_END不是一个宏定义。它只是多行注释的一部分。换句话说,它是空白。在预处理器/编译器进入解释宏定义的阶段之前,注释会被处理(变成空白)。

如果您使用的是IDE,您只需在Windows上按ctrl或在Mac上按命令>。您应该先选择要注释的行。