我与客户之间存在问题。他要求我建立一个包含键/值的数据库表,其中值是 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);
}
这行得通吗? 谢谢!
最佳答案
您需要一个“查找表”。 问题是您需要在编译之前定义所有可以调用的函数。为了添加新功能,您需要更改代码。但如果这对你来说没问题的话,这应该可以完成工作。
#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");
}
}
另一种方法,如上面的评论所述,是一个动态链接库,但你是操作系统依赖的。
关于c - 通过字符串指向函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27061458/