我想根據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