我与客户有问题。他要我设置一个带有键/值的数据库表,其值是C函数的名称。 他希望我构建一个通用的可执行文件,它将获取该表的记录并调用存储在C库中的函数。他希望能够插入或更新新的键/值对,而无需修改可执行文件,能够更改所调用的函数。
作为一个例子,我现在发布的内容非常相似:
int sum(int a, int b)
{
return a+b;
}
int sub(int a, int b)
{
return a-b;
}
int (*funcion) (int,int);
{
...
funcion = (void*)"sum";
x = funcion(4,3);
funcion = (void*)"sub";
x = funcion(4,3);
}
这会起作用吗? 谢谢!
答案 0 :(得分:0)
您需要一个"查找表"。 问题是您需要定义在编译之前可以调用的所有函数。要添加新功能,您需要更改代码。但如果那对你好,那就应该做好。
#include <stdio.h>
#include <string.h>
typedef enum
{
_printf,
_scanf,
} functions;
void *get_function_ptr(int func)
{
switch (func)
{
case _printf: return &printf;
case _scanf: return &scanf;
default: return NULL;
}
}
int main(int argc, char **argv)
{
if (strcmp(argv[1], "printf") == 0)
{
void (*ptr)(char *, char *) = get_function_ptr(_printf);
(*ptr)("%s", "hi there");
}
}
另一种方式,如上面的评论所说,一个动态链接库,但是你是OS依赖的。