通过字符串指向函数的指针

时间:2014-11-21 12:30:52

标签: c function-pointers

我与客户有问题。他要我设置一个带有键/值的数据库表,其值是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);     
}

这会起作用吗? 谢谢!

1 个答案:

答案 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依赖的。