在令牌粘贴

时间:2015-11-18 21:29:08

标签: c macros

我没有在这里发布确切的代码,但我试图完全代表问题。我有以下宏 -

#define TKN_PST(P) (ABC_##P)

在另一个宏的定义中调用此宏,该宏本身是从另一个宏调用的,如下所示 -

#define CREATE_TOKEN(P) FURTHER_PROC(P)
#define FURTHER_PROC(X) foo(a, b, TKN_PST(X), ...)

foo()是一个接受可变数量参数的函数。

我拨打CREATE_TOKEN(P)时收到错误消息。编译器告诉我ABC_未声明。

此问题仅在我致电CREATE_TOKEN(P)时发生,而CREATE_TOKEN(Q)CREATE_TOKEN(R)等未发生此问题。我怀疑这个问题可能是因为P有定义在大型代码库中的某个地方。

我尝试引入额外的间接级别,如下所示 -

#define FURTHER_PROC(X) FURTHER_PROC2(X)
#define FURTHER_PROC2(X) foo(a, b, TKN_PST(X), ...)

然后CREATE_TOKEN(Q)CREATE_TOKEN(R)等开始失败,错误“')'预期在...之前”。

这个问题可能是什么原因?

1 个答案:

答案 0 :(得分:1)

感谢paulsm4指出我正确的方向与上面的评论。

我能够在包含文件中找到“P”的定义(#define),该文件没有替换文本。 我没有考虑过这种可能性。