C 语言实现回调函数
优点
不需要改变调用的主函数,只需添加命令和相应函数。
#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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决