我确实有以下结构。我需要检查特定文件是否包含指定的函数。如果是,我需要执行它。我是C的新手。我们怎么能处理这个
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;
}
答案 0 :(得分:0)
这是一个简单的代码,可以在“助记符”名称的操作中调用自身内部的函数。编译此代码后,将生成可执行文件。此可执行文件需要两个输入参数然后你可以在你的终端上运行它:
提示$ prgname fnName parm
其中:
prgname是用于获取可执行文件的名称。
fnName是您插入到函数的结构(字段fnName
的结构类型tSymTab
)中的“助记符”名称。
parm是一个参数(字符串),要传递给要通过“助记符”名称调用的函数。
这里是代码:
#include <stdio.h>
#include <string.h>
/*
* parm may be used to send data to the function (void
* because data may be of different kinds)
*/
typedef int tFn(void *parm);
typedef struct symTab {
const char * fileName;
const char * fnName; //fnName shall be every name you want use to call the
//function pointed by fn
tFn * fn;
} tSymTab;
tFn * findFunc(const char * fnName);
int func1(void *);
int func2(void *);
tSymTab symTab[]={
{"f1.txt","func1",func1},
{"f2.txt","func2",func2},
// THIS MUST BE ALWAYS THE LAST LINE
{"","",NULL}
};
int func1(void *parm)
{
char * value = (char *)parm;
printf("I'm in func1 --- the parm value is %s\n",value);
return 0;
}
int func2(void *parm)
{
char * value = (char *)parm;
printf("I'm in func2 --- the parm value is %s\n",value);
return 0;
}
tFn * findFunc(const char * fnName)
{
int idx=0;
while(symTab[idx].fn!=NULL && strcmp(symTab[idx].fnName,fnName))
idx++;
return symTab[idx].fn;
}
int main(int argc, char *argv[])
{
tFn * fn;
if (argc<3) {
printf("%s needs two input parameters:\n\n\tThe function name\n\n\ta simple text\n\n",argv[0]);
return 1;
}
fn=findFunc(argv[1]);
if (fn!=NULL) {
fn(argv[2]);
} else {
printf("The function name %s hasn't a corresponding function in this code!\n",argv[1]);
}
return 0;
}