str.def :my_Macro(func1) my_Macro(func2) str.h :#pragma once void func1(); void func2(); #define my_Macro(a) a typedef void (*func)(); func fArray[] = { #include "str.def" }; #undef my_Macro #define my_Macro(a) # a char* str[] = { #include "str.def" }; str.cpp : #include "str.h" #include "string.h" void func1(){}; void func2(){} void main(); { char call[] = "func1"; int len = sizeof(fArray) / sizeof(fArray[0]); for(int i = 0; i < len; i++) { if(strcmp(str[i], call) == 0) { fArray[i](); break; } } }