c - 如何将 char 数组转换为 C 中的函数指针?

标签 c linux string casting function-pointers

是否可以通过强制转换将字符串或字符数组赋值给函数指针,然后运行它?

我已经定义了一些函数 int f1();, int f2();, 等等

main() 函数中,我读取了一个字符串 fct_name 并声明了一个指向函数 int (*pv)(); 的指针

我需要做这样的事情:

fct_name 可以有值 "f1", "f2"等等..

pv = (some sort of cast)fct_name;

pv();

我的观点是我想避免有利于直接赋值的条件指令(因为我的程序中有大量函数)

代码显然必须运行。

最佳答案

假设您没有外部库并且正在尝试调用在您的可执行文件中声明的函数,您可以自己进行查找

#define REGISTER_FUNC(name)  {#name, name}

struct funclist
{
    const char* name;
    void (*fp)(void);  //or some other signature
};

struct funclist AllFuncs[] = {
    REGISTER_FUNC(f1),
    REGISTER_FUNC(f2),
    REGISTER_FUNC(f3),
    {NULL,NULL}  //LAST ITEM SENTINEL
 };

现在您可以在 AllFuncs 中查找您的变量 fct_name。如果数量少,可以使用线性搜索,或者将它们全部插入到哈希表中进行 O(1) 查找。

或者,如果您的名字确实是 f1f2 等,您可以这样做

   void (*FuncList)(void)[]  = {NULL, f1,f2,f3};
   ...
   int idx = atol(fct_name+1);
   if (idx && idx < MAX_FUNCS)  
       FuncList[idx]();

关于c - 如何将 char 数组转换为 C 中的函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8512273/

相关文章:

java - 文本未保存到字符串变量

c - 使用 gdb 和 pthreads 获取有关线程的编程信息

linux - Linux 中的 echo 命令到串口

c - 行中数组的类型

linux - PCI 夹层卡有时在 x86 机器中获取 "reserved IRQ0"

linux - 设置 rsyslog 过滤器

regex - 在 gtksourceview 中匹配整个字符串

string - 从分隔字符串构建对象的最佳方法(希望不是循环情况)

c - 如何处理条件初始化,这是一种好的做法吗?

C LibPCRE TRUE/FALSE 问题