c - 将预处理器指令嵌入到函数名称中

标签 c macros c-preprocessor preprocessor-directive

我想将预处理器指令嵌入到函数名称中。基本上我想制作一个宏,它将预处理器定义作为参数,并将其定义的 VALUE 连接起来以获取函数名称。

基本上是这样的:

#define PREFIX foo
#define CALL(P, x) _##P_bar(x)

...then 
CALL(PREFIX, x) should become _foo_bar(x)

不幸的是,这会导致 _P_bar 而不是 _foo_bar

是否可以像上面那样工作?

最佳答案

C 标准定义了紧随 ## 运算符前后的宏参数的特殊行为。在这种情况下,它们不会完全扩展。这就是为什么您的代码没有按照您的预期运行。要进一步扩展参数,您必须以不紧接在 ## 运算符之前或之后的方式使用它。请尝试以下操作:

#define PREFIX foo
#define CALL2(P,x) _##P##_bar(x)
#define CALL(P, x) CALL2(P,x)

CALL(PREFIX, x) 

关于c - 将预处理器指令嵌入到函数名称中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27331559/

相关文章:

c - 将 char 数组传递给函数并将内容复制到另一个 char 数组

c - 提取 C 函数的参数类型

c - 通过/dev/mem读写进程内存,text段可以,data段不行,为什么?

c - 检查间隔范围内值的宏

c++ - 字符串常量前的 Unqualified-id

c++ - 在 gdb 中使用核心转储时,我如何确切知道哪个线程导致了 SIGSEGV?

macros - 药剂宏指令: convert atoms into vars

macros - SPSS - 返回最大值(列)的宏变量

c++ - 如何找到 Microsoft Visual C++ 中使用的编译预处理器

C 宏在一个范围内运行循环