调用不带括号的类似函数的宏

Calling a function-like macro without parentheses?

本文关键字:函数 调用      更新时间:2023-10-16

假设我们将以下内容传递给gcc的预处理器:

#define REM(...) __VA_ARGS__
#define PAIR(x) REM x
PAIR((a)b)

它将PAIR((a)b)扩展为a b。这是怎么发生的?我对REM在没有括号的情况下使用和x没有按原样回显感到困惑…

编写时:

PAIR((a)b)

给定的定义

PAIR(x) REM x

这意味着x=CCD_ 6。因此,我们可以将右侧写为

REM (a)b

对吧?

现在REM(a)只是a,所以REM (a)b只是a b(除非显式使用标记粘贴,否则标记由空格分隔)。