【发布时间】:2012-11-08 00:00:21
【问题描述】:
假设您创建了一个main() 来处理您向学生提出的练习。
每个学生都应该使用相同的 API 编写自己的函数。并且将创建一个文件,其中包含所有函数和 main 调用它们。
假设:int studentname(int a, int b) 是函数模式。
我处理它的一种方法是使用指向函数int (*func[MAX])() 的指针向量。但是你需要将向量一一实现func[0]=studentname;。
我想知道,有没有一种方法可以通过它的名字来调用一个函数?
类似:int student1(int a , int b)、student2() 等
在main 中,我们可以调用sscanf(funcname,"student%d",i); funcname();。
你还有什么想法吗?也许
int studentname(int a, int b, char *fname)
{
strcpy(fname, "studentname");
任何创意都可以! :)
谢谢! 贝科
PS。我只尝试了一个函数向量,但 C 不允许我这样做! :)
int func[2]()={{;},{;}};
这样我可以给每个学生一个数字,然后瞧……但没办法。不过这很有趣。
已编辑:我正在使用 linux。
编辑2:谢谢!我接受了一个对我有帮助的答案,但我还在下面记录了一个完整的示例作为答案。
【问题讨论】:
-
生成代码?一些脚本来读取您的姓名列表,转换为正确的格式(例如,所有小写字母、所有空格和特殊字符都已删除),然后转储调用。
-
一个最小的例子将不胜感激。
-
linux.die.net/man/3/dlopen 余弦示例:` *(void **) (&cosine) = dlsym(handle, "cos");` 我认为这是调用,不是吗?跨度>
-
我突然想到:学生函数的结果是什么?也许最好将每个学生的代码编译成可执行文件,将结果打印到标准输出,并制作一个脚本(无论哪种语言),对每个二进制文件进行分叉/执行,解析输出并验证/比较它?它有很多优点(分离、可能永远终止进程循环等)。
-
我已经在很多不同结果的练习中教授和使用这个模式。特别是对于当前的练习,它是一系列选择,每个函数都应该返回一个表示选择的 int。组合的选择导致了一条可能性的道路,必须做出新的选择。 :) 因此,作为一个简单的 int,获取数字比从标准输出解析答案更好。但我同意,对于其他练习,这可能是一个不错的优雅解决方案!
标签: c linux function function-pointers