我的结构如下。我需要检查一个特定的文件是否包含指定的功能。如果是,我需要执行它。我是新来下我们如何处理这个如何使用函数指针从多个文件中访问函数
struct {
char *filename;
char *funcname;
int (*funcptr)();
} symtab[] = {
{ "filename1", "one_func", one_func },
{ "filename2", "two_func", two_func },
};
我有下面的代码,而无需考虑文件来检查使用函数指针的功能:
int one_func(), two_func();
int (*findfunc(char *))();
struct {
char *name;
int (*funcptr)();
} symtab[] = {
{ "one_func", one_func },
{ "two_func", two_func },
};
int (*findfunc(char *name))()
{
int i;
for (i = 0; i < sizeof(symtab)/sizeof(symtab[0]); i++)
{
if (strcmp(name, symtab[i].name) == 0)
return symtab[i].funcptr;
}
puts("function not defined");
return NULL;
}
int one_func()
{
puts("one");
return 0;
}
int two_func()
{
puts("two");
return 0;
}
int main()
{
char *funcname = "two_func";
int (*funcp)() = findfunc(funcname);
if (funcp != NULL)
(*funcp)();
return 0;
}
在运行时?在windows上使用'.dll'共享库 - >在linux上使用'loadlibrary'和好友,'.so' - >使用'dlopen'和好友。维基百科上的示例(出于某种原因)https://en.wikipedia.org/wiki/Dynamic_loading – Lanting
看起来像[XY问题](http://xyproblem.info/)。你正在努力实现什么? –
顺便说一句:请正确缩进你的代码。 –