【发布时间】:2021-03-01 23:04:04
【问题描述】:
我知道以下是一个非常简单的示例,但是我如何将以下内容转换为使用预处理器 ## 'glue' 运算符的单个函数调用?
void print_string(char *s)
{
printf("%s\n", s);
}
void print_num(int n)
{
printf("%d\n", n);
}
int main(void)
{
print_string("Hello");
print_num(5);
}
我唯一能做的(这并没有真正简化任何事情)是:
#define PRINT(type) print_ ## type
PRINT(string)("Hello");
PRINT(num)(4);
或者,有没有更好的方法来使用它?
【问题讨论】:
-
从 C11 尝试 _Generic?
-
@tstanisl 谢谢,你能举个例子吗?我以前从未使用过那种类型(?)。
-
你不能用预处理器做到这一点。预处理器处理编译时值,而不是运行时值。
-
您可以使用预处理器执行此操作,但不能完全使用您显示的语法。你会接受需要
PRINT(string, "Hello");而不是PRINT(string)("Hello");的语法吗?
标签: c c-preprocessor