c - 执行 token 粘贴的宏中的 token 未声明错误

标签 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) 等开始失败,出现错误“')' expected before ...”。

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

最佳答案

感谢 paulsm4 用他上面的评论为我指明了正确的方向。

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

关于c - 执行 token 粘贴的宏中的 token 未声明错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790756/

相关文章:

C-在一定范围内具有x个因子的数字的数量

c - Xcode可以跳转到c站lib的#define

c - 检测写入字符串

C++ - 自动将函数从头文件移动到 cpp 文件

c++ #define一个带括号的宏?

可以在标记粘贴之前扩展宏吗?

c - 为什么我的所有线程都使用 sleep() 进行 sleep ?

当文件包含拉丁字符时,CreateFile 失败 (ERROR_FILE_NOT_FOUND)

c - 宏展开后的输出似乎不符合理解(可能是错误的理解)

c++ - 我们可以有递归宏吗?