优点

不需要改变调用的主函数,只需添加命令和相应函数。

#include "stdio.h"
#include "stdlib.h"
#include "string.h" static void cmd_hello(void)
{
hello();
} static void cmd_hi(void)
{
hi();
} static void cmd_exit(void)
{
printf("process will exit!!!\n");
exit(0);
} void hello(void)
{
printf("console output:hello\n");
} void hi(void)
{
printf("console output:hi\n");
} typedef void (*callback) (void);
// define command struct
typedef struct cmd
{
char name[10]; // define command name
callback func; // define callback function
}cmd_t; // define command array
const cmd_t cmd_tbl[] =
{
{"hello",cmd_hello},
{"hi",cmd_hi},
{"exit",cmd_exit},
}; // find the callback function by command name
cmd_t* my_find(const char*val)
{
int i;
for(i=0;i<sizeof(cmd_tbl)/sizeof(cmd_tbl[0]);i++)
{
if(!strcmp(val,cmd_tbl[i].name))
{
return &cmd_tbl[i];
}
}
return 0;
} int main()
{
char val[20] = {};
cmd_t *cmd_ptr;
while(1)
{
gets(val);
cmd_ptr = my_find(val);
if(cmd_ptr)
cmd_ptr->func();
else
printf("no command\n");
} return 0;
}

C 语言实现回调函数的更多相关文章

  1. c语言 ,回调函数[个人理解]

    回调函数:把需要调用的方法的指针pCallBackFuncX作为参数传递给一个函数UsrFunction,以便该UsrFunction函数在处理相似事件的时候可以灵活的使用不同的方法.   以在fla ...

  2. C语言中的回调函数(Callback Function)

    1 定义和使用场合 回调函数是指 使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数.函数是你实现 ...

  3. PHP回调函数及匿名函数概念与用法详解

    1.回调函数 PHP的回调函数其实和C.Java等语言的回调函数的作用是一模一样的,都是在主线程执行的过程中,突然跳去执行设置的回调函数: 回调函数执行完毕之后,再回到主线程处理接下来的流程 而在ph ...

  4. C 之回调函数

    软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用.同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用:回调是一种双向调用模式,也就是 ...

  5. C语言的本质(17)——回调函数

    如果函数的参数是一个函数指针,我们可以通过这个函数指针传递一个函数的地址给另外一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数(Callback Function).回调函数不是由 ...

  6. C语言中的回调函数

    C语言中通过函数指针实现回调函数(Callback Function) ====== 首先使用typedef定义回调函数类型 ======  typedef void (*event_cb_t)(co ...

  7. C语言学习及应用笔记之七:C语言中的回调函数及使用方式

    我们在使用C语言实现相对复杂的软件开发时,经常会碰到使用回调函数的问题.但是回调函数的理解和使用却不是一件简单的事,在本篇我们根据我们个人的理解和应用经验对回调函数做简要的分析. 1.什么是回调函数 ...

  8. C语言回调函数详解

    1. 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义.我在百度上搜了一下,发现众说纷纭,有很大一部分都是使用类 ...

  9. 深入浅出剖析C语言函数指针与回调函数(一)【转】

    本文转载自:http://blog.csdn.net/morixinguan/article/details/65494239 关于静态库和动态库的使用和制作方法. http://blog.csdn. ...

随机推荐

  1. Vue小练习(for循环,push方法,冒泡,if判断(以及与for循环的连用),按钮高亮,根据input框筛选数据)

    vue练习 ''' 1. 先有一下成绩单数据 scores = [ { name: 'Bob', math: 97, chinese: 89, english: 67 }, { name: 'Tom' ...

  2. 微信小程序实现图片放大预览效果

    可以直接用微信程序自己的api很方便的实现 核心方法 wx.previewImage: 直接上代码, wxml: <!--pages/prewpicture/prew.wxml--> &l ...

  3. Jacobi-Gauss-Lobatto积分点和积分权

    这次介绍的是关于Jacobi正交多项式的零点计算问题,谷歌学术里面可以搜索到很多相关学术文章.由于在Galerkin-Spectral方法中经常使用Jacobi正交多项式,所以整理了一些相关知识点. ...

  4. jquery.pagination.js的使用

    html页面 //要显示内容表格 <table id="gifts"> <tr class='first'> <th>时间</th> ...

  5. linux-根目录添加内存

    01,添加磁盘到服务器 02, 查看添加的内容 这个是新添加的 03, 创建新分区 [root@oracle01 ~]# fdisk /dev/sdb --格式化分析 Welcome ). Chang ...

  6. WebAPI 使用控制台启动

    using System; using System.Web.Http; using System.Web.Http.SelfHost; namespace UAC_OAuth2Center { pu ...

  7. Nacos集成Spring Cloud Gateway 基础使用

    项目结构 项目 端口 描述 nacos-provider 8000 服务 nacos-getway 8001 网关 nacos-provider项目依赖 <dependencies> &l ...

  8. 100教程-100jc.cn

    个人编程笔记网站(持续更新) http://100jc.cn

  9. golang 1.12 自动补全

    golang 1.12 版本的自动补全问题 问题 golang 1.12 开始, 默认的 go install 不再生成 pkg 文件. 所以对第三方库的引用, 无法进行代码的自动补全. 解决方法 g ...

  10. python之lambda、filter、map、reduce的用法说明(基于python2)

    python中有一些非常有趣的函数,面试的时候可能会遇到.今天也来总结一下,不过该类的网上资料也相当多,也没多少干货,只是习惯性将一些容易遗忘的功能进行整理. lambda 为关键字.filter,m ...