【发布时间】:2022-01-05 04:59:07
【问题描述】:
C 标准中是否有任何内容阻止我执行以下操作?
// main.c
#define DECORATE(x) ***x***
#include "call_macro.h"
this is the text I want decorated)
// call_macro.h
DECORATE(
通过gcc -E main.c 运行它时,我希望得到
*** this is the text I want decorated***
相反,它抱怨macro_call.h:2: error: unterminated argument list invoking macro "DECORATE",但我实际上在标准中找不到任何禁止它。
想法?
【问题讨论】:
-
Clang 没有抱怨。无法在 Godbolt 中测试 GCC,除非它有某种方式提供用户定义的头文件。有人用 GCC 测试这个吗?
-
我非常确信有一条规则 somewhere 表示宏调用可能不会在包含的文件中开始并继续到包含它的文件中,但我查看了我自己通过 6.10 并找不到它,这可能意味着它隐藏在 DR 响应中并且从未被纳入标准文本(无论如何从 N1570 开始)。希望其他人可以给出更明确的答案。
-
-
(顺便说一句,OP,不要这样做。如果你这样做,一群暴徒会拿着干草叉和火把出现在你家门口。)
-
@JohnBollinger 记录。删除了 c99 标签
标签: c gcc language-lawyer c-preprocessor