【发布时间】:2016-05-30 06:50:54
【问题描述】:
我想根据func_name字符串调用函数。
我的代码如下:
#define MAKE_FUNCNAME func_name##hello
void call_func(void* (*func)(void))
{
func();
}
void *print_hello(void)
{
printf("print_hello called\n");
}
int main(void)
{
char func_name[30] = "print_";
call_func(MAKE_FUNCNAME);
return 0;
}
但是这段代码不起作用。我希望代码像call_func(print_hello) 一样工作。但是预处理器将我的代码视为call_func("print_hello")。如何在 C 中使用宏来使我的异常?还是不能使用 C?
【问题讨论】:
-
我认为这应该是不可能的。这个程序编译成没有任何标签信息的二进制可执行程序(用于调试)后,系统如何知道调用的正确函数呢?
-
使用宏是不可能的,至少就其本身而言是不可能的。可以在字符串和函数指针之间创建某种映射。唯一的方法是使用一个宏,该宏扩展为一组语句(可能包括函数调用),结果是在运行时完成映射。
标签: c macros c-preprocessor