执行令牌粘贴的宏中的令牌未声明错误
Token undeclared error in a macro that does token pasting
我没有在此处发布确切的代码,但我已尽力完整地说明问题。我有以下宏 -
#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)
等开始失败,出现错误“')' expected before ...”。
出现此问题的原因可能是什么?
感谢 paulsm4 用他上面的评论为我指明了正确的方向。
我能够在包含的文件中找到 "P" 的定义 (#define),该文件没有替换文本。
我没有考虑过这种可能性。
我没有在此处发布确切的代码,但我已尽力完整地说明问题。我有以下宏 -
#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)
等开始失败,出现错误“')' expected before ...”。
出现此问题的原因可能是什么?
感谢 paulsm4 用他上面的评论为我指明了正确的方向。
我能够在包含的文件中找到 "P" 的定义 (#define),该文件没有替换文本。 我没有考虑过这种可能性。