如何用宏来实现用函数名称调用函数

codesnail 2012-04-26 01:55:14
例如

void fun()
{
printf("fun is called!");
}

int main()
{
char *s="fun";
//问题是如何通过字符指针s来调用函数fun?这就是所谓的反射吗,c语言能实现吗?感谢!
return 0;
}
...全文
483 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
恨天低 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

#define FUN_MACRO() fun()

void fun()
{
printf("fun is called!");
}

int main()
{
FUN_MACRO()
return 0;
}
[/Quote]

。。。。。无语。
wfq0987 2012-04-26
  • 打赏
  • 举报
回复
#define FUN_MACRO() fun()

void fun()
{
printf("fun is called!");
}

int main()
{
FUN_MACRO()
return 0;
}
恨天低 2012-04-26
  • 打赏
  • 举报
回复
自己写个数据结构吧。字符串 - 函数指针。
evencoming 2012-04-26
  • 打赏
  • 举报
回复
看人一堆c/c++各种高级特性弄过这个,貌似结果都不怎么样.

还不如说你具体需求,再想办法
codesnail 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
宏是预编译时期处理的。也就是说,用宏,你还不如直接写函数名,不更方便。

可以用函数指针,做个表,查表来模拟。
[/Quote]
说的有道理,知道怎么做了,感谢各位了,结贴。
codesnail 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
你说你要是运行过程中输入函数名怎么办???呵呵,别折腾了,直接用函数指针吧
[/Quote]
我现在的需求用函数指针无法实现,是在不行就用switch case 实现吧。。。。
luciferisnotsatan 2012-04-26
  • 打赏
  • 举报
回复
宏是预编译时期处理的。也就是说,用宏,你还不如直接写函数名,不更方便。

可以用函数指针,做个表,查表来模拟。
玩笑 2012-04-26
  • 打赏
  • 举报
回复
你说你要是运行过程中输入函数名怎么办???呵呵,别折腾了,直接用函数指针吧
codesnail 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
C语言是编译型语言,不是动态语言,别做梦了。

唯一的办法是做一个const char * => function ptr的哈希映射。
[/Quote]
有道理,这个映射怎么实现,能提供下思路吗,不能用数组实现啊,
qq120848369 2012-04-26
  • 打赏
  • 举报
回复
C语言是编译型语言,不是动态语言,别做梦了。

唯一的办法是做一个const char * => function ptr的哈希映射。
codesnail 2012-04-26
  • 打赏
  • 举报
回复
我现在要做一个类似框架的东东,这个无法实现就堵住了。。。。
evencoming 2012-04-26
  • 打赏
  • 举报
回复
大概就是 通过保存 函数名字符串和函数的映射关系.
然后调用的是通过 函数名找到函数再来调用.
evencoming 2012-04-26
  • 打赏
  • 举报
回复
一堆堆的宏,如果实现这个,保证你自己都绕不出来.
放弃吧

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧