返回信息流假设程序里面定义了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],这样编译就不能通过了。
希望大家给点意见啊。谢谢了。
这是一条镜像帖。来源:北邮人论坛 / cpp / #73576同步于 2013/9/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
输入一个数字X,如何自动调用函数funX?
youziboy
2013/9/2镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
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
非常感谢,函数指针用到妙啊。
【 在 doit 的大作中提到: 】
: typedef void (*fun)(char *arg);
: fun a[100] = {fun1, fun2, ..., fun100};
: scanf("%d", X);
: ...................
http://stackoverflow.com/questions/5256313/c-c-macro-string-concatenation
搞错了。
【 在 youziboy 的大作中提到: 】
: 可否明指一下?
【 在 doit 的大作中提到: 】
: typedef void (*fun)(char *arg);
: fun a[100] = {fun1, fun2, ..., fun100};
: scanf("%d", X);
: ...................
学习了!