在没有括号的情况下调用类似函数的宏?

时间:2016-05-16 18:37:04

标签: c++ c-preprocessor

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

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

PAIR((a)b)

它将PAIR((a)b)扩展为a b。这是怎么发生的?我很困惑REM没有使用括号而x没有被回应......

1 个答案:

答案 0 :(得分:3)

当你写:

PAIR((a)b)

给定定义

PAIR(x) REM x

表示x = (a)b。所以,我们可以将右侧写为

REM (a)b

正确?

现在REM(a)仅为a,因此REM (a)b只是a b(除非您明确使用令牌粘贴,否则令牌会被空格分隔。)