c - 预处理器##运算符和变量

标签 c macros c-preprocessor

有没有办法通过使用运算符## 和变量值来“生成”函数名称。例如:

#define FUN_I(fun, fun_id)  fun##fun_id
#define FUN(fun, fun_id)    RECV_CB_FUN_I(fun, fun_id)

int foo0(int x) {
    // do something
}
int main()
{
   int i = 0;
   FUN(foo,i)(1);
}

FUN 生成 fooi。有没有办法以某种方式获取 foo0,或者在这种情况下我必须使用实际数字 0,例如 FUN(foo, 0)(1);

干杯

最佳答案

您必须使用实际的 0(或其他宏)。宏扩展在编译时由 C 预处理器处理。它对变量的运行时值一无所知。

关于c - 预处理器##运算符和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55103493/

相关文章:

c++ - 如何将位图字体从 C header 格式转换为原始位

c - 数组点0不重置内容

c++ - 函数调用作为 C 宏的参数

macros - 如何将空白/空参数传递给 Rust 中的宏?

c - 如何以编程方式将整数映射到 const 字符串?

c++ - MSBuild C++ - 命令行 - 可以传递定义吗?

c - 为什么我在使用 realloc() 时会出现双重释放或损坏错误?

c - 关于linux中container_of宏的疑问

c - 如何设置gcc -E深度(预处理级别)?

在指向数组的指针上调用 memset?