我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: c语言怎样通过字符串数组(内容为函数名)调用函数 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

devin



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 272
威望: 0
浮云: 493
在线等级:
注册时间: 2010-02-08
最后登陆: 2016-04-28

5come5帮你背单词 [ cute /kju:t/ a. 娇小玲珑惹人喜爱的,小巧的 ]


c语言怎样通过字符串数组(内容为函数名)调用函数

熟悉c的帮忙看下,实现如下功能:

void goto_test(){
    printf("this is go to test\n");
}

char a[] = "goto_test";

怎样通过类似java反射机制来通过读取a的内容来执行函数?
execute_by_name(a);  // ??



顶端 Posted: 2010-05-18 16:39 | [楼 主]
sparkhunter



性别: 帅哥 状态: 该用户目前不在线
等级: 人见人爱
家族: 吃呆一族
发贴: 2194
威望: 0
浮云: 1671
在线等级:
注册时间: 2006-02-21
最后登陆: 2021-05-28

5come5帮你背单词 [ ampere /'æmp/ə/ n. 安培 ]


你说的应该是动态语言的功能。
C里只能用函数指针或者宏来模仿。
顶端 Posted: 2010-05-18 23:28 | [1 楼]
sparkhunter



性别: 帅哥 状态: 该用户目前不在线
等级: 人见人爱
家族: 吃呆一族
发贴: 2194
威望: 0
浮云: 1671
在线等级:
注册时间: 2006-02-21
最后登陆: 2021-05-28

5come5帮你背单词 [ humour /'hju:mə/ n. 幽默(感),诙谐 ]


兄台在MTK吗?呵呵。

C本身不具备动态属性,你的最后一个想法应该没办法完美支持。
貌似我在哪里看到过一个依赖编译器的方法,类似hack。想不起来了……

拙见是用符号表+函数指针模拟,再用一个接口来负责符号与代码的映射。
这样的做法很常见,比如动态链接库,dll里保存着符号表和代码,由加载函数实现映射。
或者system()函数,参数传递给shell,shell做的映射。
typedef void (* function)(void);

typedef struct _LIB{
    char * name;
    function exec;
}LIB;

static LIB lib[100]; // build your own lib.

void invoke(char * name)
{
    if(name == lib.name)
    lib.exec();
}

再利用宏做一些trick,让代码看起来更像reflection风格……
本帖最近评分记录:
  • 浮云:15(震月) 技术仔要顶
  • 顶端 Posted: 2010-05-19 22:01 | [2 楼]
    我来我网·5come5 Forum » 程序员之家

    Total 0.008259(s) query 6, Time now is:11-21 22:44, Gzip enabled
    Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号