是否可以通过强制转换将字符串或字符数组赋值给函数指针,然后运行它?
我已经定义了一些函数 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) 查找。
或者,如果您的名字确实是 f1
、f2
等,您可以这样做
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/