gpt4 book ai didi

c - 如何使用函数指针访问多个文件中的函数

转载 作者:行者123 更新时间:2023-11-30 16:44:56 25 4
gpt4 key购买 nike

我确实有以下结构。我需要检查特定文件是否包含指定的函数。如果是,我需要执行它。我是 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;
}

最佳答案

这是一段简单的代码,可以通过操作“助记符”名称来调用其内部的函数。编译此代码后,将生成可执行文件。该可执行文件需要两个输入参数。然后您可以在终端中运行它:

prompt$ 程序名称 fnName 参数

地点:

  • 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;
}

关于c - 如何使用函数指针访问多个文件中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44302220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com