问:能否用字符串内容定义函数名

nkranber 2008-02-16 05:40:00
如果可以的话,怎么实现呢?谢谢 。
...全文
261 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxmv99 2008-02-21
  • 打赏
  • 举报
回复
学习来了
brookmill 2008-02-20
  • 打赏
  • 举报
回复
学习
iambic 2008-02-20
  • 打赏
  • 举报
回复
写个if...else...不就完了。简单的方法不用,非找那种诡计。
imasmallbird 2008-02-19
  • 打赏
  • 举报
回复
学习中!!
Treazy 2008-02-17
  • 打赏
  • 举报
回复
不能用strcmp比较?

那就只能先生成一个.a或者.so

然后再去找函数入口

和dll调用类似,只不过环境变成了linux
Treazy 2008-02-17
  • 打赏
  • 举报
回复
不能用strcmp比较?

那就只能先生成一个.a或者.so

然后再去找函数入口

和dll调用类似,只不过环境变成了linux
Treazy 2008-02-17
  • 打赏
  • 举报
回复
基本上一个函数表就可以解决了

#define SIZE(x) (sizeof(x)/sizeof(x[0]))
#define MAXLEN 20
typedef void (*PFUCTION)(void);
typedef struct
{
char FunctonName[20];
PFUNCTION pFunction;
}FUNCTIONTABLE;
void aa_function(void);
void bb_function(void);

FUNCTIONTABLE FunctionTable[] =
{
{"aa", aa_function},
{"bb", bb_function}
}

char InputStr[MAXLEN];
...
int i;
for(i = 0; i<SIZE(FunctionTable); i++)
if(!strcmp(InputStr, FunctionTable[i].FunctionName))
{
FunctionTable[i].pFunction();
}
nkranber 2008-02-17
  • 打赏
  • 举报
回复
在linux下面呢?
cnzdgs 2008-02-17
  • 打赏
  • 举报
回复
把我在7楼给的代码改一下就可以。
实现这种调用的方法有很多,我认为用dll比较简单一点。
visame 2008-02-17
  • 打赏
  • 举报
回复
如果这样,cnzdgs的方法就很好了!
nkranber 2008-02-17
  • 打赏
  • 举报
回复
要求是不能进行字符串的比较,像这样:
#define CALL_FUNCTION(x) x##_function()
if(!strcmp(str, "aa"))

CALL_FUNCTION(aa);
nkranber 2008-02-17
  • 打赏
  • 举报
回复
是这样子的:
假如我现在有两个函数:
一个是:aa_function()和bb_function()
然后通过终端输入的字符串来判断调用哪一个函数.
例如:我输入aa 那么就调用aa_function();
Treazy 2008-02-17
  • 打赏
  • 举报
回复
首先搞明白楼主实现的这个目的是什么!

linux下也可以生成.a或者.so来使用

如果仅仅是为了方便函数定义,那定义宏如3楼

或者建立函数表都是不错的选择

关键是你的目的是什么
visame 2008-02-17
  • 打赏
  • 举报
回复
to cnzdgs:
你这个好像是先定义好一个函数,然后再根据函数名调用吧!
不过人家是想实时定义函数,并且该函数名是实时的。
比如:输入cnzdgs,就生成了一个func_cnzdgs()。3楼的好像可以。
Matlab里好像可以。eval实现。
nkranber 2008-02-17
  • 打赏
  • 举报
回复
请问7楼:
在LINUX下面请问怎么实现?
食人族哲学家 2008-02-17
  • 打赏
  • 举报
回复
3楼哪里跑题了,他说的应该是最容易的实现方式。
DLL倒是满直接的,
我是小牧 2008-02-17
  • 打赏
  • 举报
回复
用一个二进制编辑器直接在obj里边改
cnzdgs 2008-02-17
  • 打赏
  • 举报
回复
做一个dll,把你要用的函数做成导出函数。
举个简单例子,在exe中加入下列代码。
typedef int (*PFN)(int);

BOOL CallStringFunction(HMODULE Library, LPCSTR FunctionName, int Argument, int &ReturnValue)
{
PFN function = (PFN)GetProcAddress(Library, FunctionName);
if (function == NULL) return FALSE;
ReturnValue = function(Argument);
return TRUE;
}
程序先执行LoadLibrary载入dll,然后可以通过上面的函数来调用具体的函数。
nkranber 2008-02-17
  • 打赏
  • 举报
回复
请问怎么实现?
nkranber 2008-02-17
  • 打赏
  • 举报
回复
生成.a和.so 找函数入口的方法能告诉我么?
谢谢哈:)
加载更多回复(5)

70,031

社区成员

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

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