【发布时间】:2013-03-10 20:16:00
【问题描述】:
我正在尝试在 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:错误:粘贴“/”和“/”未提供有效的预处理令牌
prog.c:83:错误:“/”标记之前的预期表达式
如前所述,我使用该主题并尝试了许多变体,但都未能给出类似的诊断结果。
我做错了什么,为什么文章中的代码编译不好?
【问题讨论】:
-
编译器告诉你你做错了什么。这些技巧有时适用于损坏的编译器,但它们根本不应该工作,你不应该使用它们。
-
@AlexeyFrunze - 你是说这段代码基本上是非法的吗?为什么会这样?为什么我不能创建评论宏?
-
是的,非法的。史蒂夫的回答提到了标准的相关部分。
标签: c gcc macros c-preprocessor