如何创建“C单行注释”宏

我试图在C中创建一个“单行注释”宏,根据一些全局宏定义,这有条件地用于注释掉代码行.这与 this article

中表达的观点相同.

尝试这段代码的许多排列,我不断收到编译器的错误消息.

例如,直接关注该页面的代码示例:

#define COMMENT SLASH(/)
#define SLASH(s) /##s
#define DEBUG_ONLY COMMENT
DEBUG_ONLY a = b;   // <-- line #83

GCC给出以下错误:

prog.c:83:1: error: pasting “/” and “/” does not give a valid preprocessing token  prog.c:83: error: expected expression before ‘/’ token

如上所述,我玩过这个主题并尝试了很多变化,但都没有给出类似的诊断.

我做错了什么,为什么文章中的代码编写得不好?

它不起作用,因为语言规范不允许它.实际上,在宏替换之前删除了注释.删除注释后,//不是有效令牌(如错误消息所示).它不能通过宏替换生成,它不再意味着“评论”.

这是标准中的“翻译阶段”.章节编号有所不同,但C89,C99和C11都在第3阶段定义:

Each comment is replaced by one space character.

然后在第4阶段:

macro invocations are expanded

翻译自:https://stackoverflow.com/questions/15545520/how-to-create-a-c-single-line-comment-macro