Я хочу позвонить функции в соответствии с 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?
Я думаю, что это не должен возможно. После того, как эта программа будет скомпилирована в двоичную исполняемую программу без какой-либо информации метки (для отладки), как система должна знать правильную функцию для вызова? – MikeCAT
Невозможно с макросом, по крайней мере, самостоятельно. Было бы возможно создать какое-то сопоставление между строками и указателями функций. Единственный способ - это макрос, который расширяется до набора операторов (включая, возможно, вызовы функций), с тем, что отображение выполняется во время выполнения. – Peter