【发布时间】:2018-06-09 13:34:36
【问题描述】:
我已经搜索过,似乎在 C 中使用 ## 预处理器运算符是不可能的。
我想使用一个变量值并创建一个类似 MY_FUNC_3 的函数名
我知道如何使用“#define VALUE 3”并执行此操作,但我如何对变量执行相同操作。
#define PASTE(x,y) x ## y
#define function (func_name, value) PASTE(x,y)
int a= 3;
for (int a = 2; a < 10; a++)
{
printf("%s\n", function(MY_FUNC, a))
}
【问题讨论】:
-
所有预处理器宏将在编译期间被替换。您要实现的目标是在运行时完成。为什么不能用
sprintf()代替? -
#define function (func_name, value) PASTE(x,y)应该是#define function (func_name, value) PASTE(func_name, value),但是为什么还要麻烦创建别名呢? -
你能手动写出你想要达到的目标吗?我不认为我们期望通过查看代码得到同样的结果。
-
确实不清楚您希望从中得到什么,但根本问题是预处理器在编译开始时运行,并且不知道变量、循环等。它进行简单的文本替换。你根本无法按照你想做的方式做任何你想做的事情。
标签: c concatenation c-preprocessor