我正在编写一个可以简化的C程序,如果我设法做这样的事情:
int (*func)(int);
char* str= "adder";
func = str;
func(2);
我创建了一个函数指针,一个char *,我尝试通过char *将函数的名称赋给指针。在此示例中,adder(int)函数存在。
这实际上可行吗?
我知道这样做的标准方法就是func = adder;,但这不会解决它。
非常感谢!
安东尼奥
答案 0 :(得分:3)
你制作了这样一张桌子:
static const struct {
char *name;
int (*func)(int);
} map[] = {
{ "adder", adder },
/* ... */
{ 0, 0 }
}
然后使用此代码:
for (i=0; map[i].name && strcmp(map[i].name, str); i++);
if (map[i].func) y = map[i].func(x);
else /* ... */
答案 1 :(得分:2)
这不符合我认为你应该做的事情。如果您设法将"adder"
转换为函数指针,那么您将尝试将实际文本作为函数执行,而不是您想要的。你可以保留函数指针的数组,也可以保留文本→函数指针的映射。除此之外,我们还需要有关您正在做的事情的更多信息。
答案 2 :(得分:2)
我知道的最好的方法是将您的函数放在动态库中,并使用dlsym或您的操作系统等效来获取函数指针。或者,您必须以某种方式从字符串到函数指针设置自己的映射。
答案 3 :(得分:1)
你可以使用windows中的dll和getprocaddress函数来完成这样的事情,但是你必须只使用具有相同签名的函数或保留某种类型的精细映射。但是,您要做的却需要额外的基础架构。如果你使用c ++,你可以使用地图来存储字符串和fnptrs之间的关系。