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

标签 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);     
}

这行得通吗? 谢谢!

最佳答案

您需要一个“查找表”。 问题是您需要在编译之前定义所有可以调用的函数。为了添加新功能,您需要更改代码。但如果这对你来说没问题的话,这应该可以完成工作。

#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/

相关文章:

c++ - C代码分解器

c - 使用 fclose 到 popen 的管道是一个严重的错误?

c - 如何为国际象棋中的女王移动生成位板占用掩码?

c - C中的堆栈执行

c - 到达一定时间后杀死子进程

c - 目标文件缺少函数符号

c# - 分配免费委托(delegate)或其他方式通过地址调用方法?

c++ - 如何使指针指向派生类的成员函数

c++ - 将指针传递给非静态成员函数

c++ - 调用一个函数指针,其分配的函数的参数少于指针类型