C 执行标记粘贴的宏中的标记未声明错误
我没有在这里发布确切的代码,但我已经尝试完整地描述了这个问题。我有以下宏-C 执行标记粘贴的宏中的标记未声明错误,c,macros,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), ...) #define FURTHER_PROC(X) FURTHER_PROC2(X) #define FURTHER_P
#define TKN_PST(P) (ABC_##P)
此宏在另一个宏的定义中调用,该宏本身从另一个宏调用,如下所示-
#define CREATE_TOKEN(P) FURTHER_PROC(P)
#define FURTHER_PROC(X) foo(a, b, TKN_PST(X), ...)
#define FURTHER_PROC(X) FURTHER_PROC2(X)
#define FURTHER_PROC2(X) foo(a, b, TKN_PST(X), ...)
foo()是一个接受可变数量参数的函数
我调用CREATE\u TOKEN(p)
时出错。编译器告诉我,ABC\uu
未声明
此问题仅在调用CREATE\u-TOKEN(p)
时发生,而对于CREATE\u-TOKEN(Q)
、CREATE\u-TOKEN(R)
等,则不会发生。我怀疑此问题可能是由于p在大型代码库中的某个地方有一个定义
我尝试引入一个额外的间接层次,如下所示-
#define CREATE_TOKEN(P) FURTHER_PROC(P)
#define FURTHER_PROC(X) foo(a, b, TKN_PST(X), ...)
#define FURTHER_PROC(X) FURTHER_PROC2(X)
#define FURTHER_PROC2(X) foo(a, b, TKN_PST(X), ...)
然后,CREATE_-TOKEN(Q)
,CREATE_-TOKEN(R)
,etc开始失败,出现错误“)”,预期在
这个问题的原因可能是什么?感谢paulsm4为我指出了正确的方向,他在上面的评论 我能够在包含的文件中找到“p”的定义(#define),该文件没有替换文本。
我没有考虑过这种可能性。如你所知,
ABC_uuuuuuuuu是未声明的
意味着你的预处理器将“TKN_PST(p)”中的“p”扩展为“”。因为“Q”和“R”似乎起作用。。。我同意你的猜测,“P”本身就是一个宏,定义为“其他地方”。建议:使用-E
(或编译器的等效工具)编译以调试宏扩展。感谢您的评论。我确实在其他地方找到了一个定义,它包含在定义这些宏的文件中。这个定义只是一个没有替换文本的定义。