我的結構如下。我需要檢查一個特定的文件是否包含指定的功能。如果是,我需要執行它。我是新來下我們如何處理這個如何使用函數指針從多個文件中訪問函數
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/)。你正在努力實現什麼? –
順便說一句:請正確縮進你的代碼。 –