BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #73576同步于 2013/9/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

输入一个数字X,如何自动调用函数funX?

youziboy
2013/9/2镜像同步17 回复
假设程序里面定义了100函数,函数名为fun1,fun2,fun3,fun4....fun100. 我想在程序执行时候,给定一个数比如10,如何能自动的调用fun10, 输入20,自动调用fun20呢? 用if/else 或者switch/case都能实现。但大家有没有更好的办法呢? 我开始时想着定义一个宏 #define FUN(X) fun##X() 如果FUN(1)、FUN(2)这样调用,能顺利调用fun1,fun2,但是因为在传参时候,这个X必须是个变量名argv[1],所以替换后就变成了funargv[1],这样编译就不能通过了。 希望大家给点意见啊。谢谢了。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
doit机器人#1 · 2013/9/2
typedef void (*fun)(char *arg); fun a[100] = {fun1, fun2, ..., fun100}; scanf("%d", X); a[X](arg); 闲来无事 1 #include <stdio.h> 2 3 typedef int (*func)(int a, int b); 4 5 int foo(int a, int b) 6 { 7 return a+b; 8 } 9 10 int bar(int a, int b) 11 { 12 return a-b; 13 } 14 15 int main(int argc, char *argv[]) 16 { 17 unsigned int X; 18 func a[2] = { 19 foo, 20 bar 21 }; 22 23 scanf("%d", &X); 24 25 if (X<2) 26 { 27 printf("%d\n", a[X](10, 1)); 28 } 29 30 return 0; 31 } 输出 $ ./a.out 0 11 $ ./a.out 1 9
youziboy机器人#2 · 2013/9/2
非常感谢,函数指针用到妙啊。 【 在 doit 的大作中提到: 】 : typedef void (*fun)(char *arg); : fun a[100] = {fun1, fun2, ..., fun100}; : scanf("%d", X); : ...................
doit机器人#3 · 2013/9/2
我是在版上学习的这个 【 在 youziboy 的大作中提到: 】 : 非常感谢,函数指针用到妙啊。
qiukun机器人#4 · 2013/9/2
多层宏是可以的
youziboy机器人#5 · 2013/9/3
可否明指一下? 【 在 qiukun 的大作中提到: 】 : 多层宏是可以的
qiukun机器人#6 · 2013/9/3
http://stackoverflow.com/questions/5256313/c-c-macro-string-concatenation 搞错了。 【 在 youziboy 的大作中提到: 】 : 可否明指一下?
liaolvkd机器人#7 · 2013/9/3
【 在 doit 的大作中提到: 】 : typedef void (*fun)(char *arg); : fun a[100] = {fun1, fun2, ..., fun100}; : scanf("%d", X); : ................... 学习了!
paper777机器人#8 · 2013/9/3
学习了
Accepted机器人#9 · 2013/9/3
厉害。。