函数指针——回调函数、函数Table

目录

一、前言

二、回调函数

三、函数Table

四、高阶用法


一、前言

开发面对对象的C工程和大型复杂工程中面对多事件多状态情况下,使用函数数组将使工程变得简洁、容易维护

二、回调函数

函数指针:

可变参数:

返回类型 函数名(classtype, …){}

C语言传递可变参数详解_可变参数传递-CSDN博客

指针函数本质是函数返回指针类型,函数指针是具有函数功能的指针,可以赋值,也可以传参。

定义一个函数指针,传递不确定个数的参数

typedef void (* CB_FUNC_PTR)(…)

定义一个函数指针,传递确定个数的参数

typedef void (* CB_FUNC_PTR)(int a, int b)

定义函数,将参数指针作为参数传递:

Void usrfunc(int data1, CB_FUNC_PTR cb_func, int b)

{

Int a;

Cb_func(a.b);

}

它有什么用处呢,诊断UDS应用层,在面临多流程多NRC情况下,可以择时调用诊断响应返回响应的NRC。

三、函数Table

定义事件和编号列表,定义函数数组Table,这样可以在接收事件后,可以直接从表中调用对应的处理函数:

定义函数指针

typedef char (*event_function)(uchar* ptrMsg, uchar msgSize );

定义数组:

event_function event_func_matrix[Event_DEF_MAX]={

(event_function)event_func1,

(event_function)event_func2,



};

Void main_loop

{

Uchar no = Get_event_no()

event_func_matrix(&msg[0], msgSize);

}

四、高阶用法

我们在实际场景中会有这样的情况,有正常模式,烧程模式,校准模式 3种模式,每种模式都有最多10个不同的子状态,然后还有30种可操作函数。

定义函数指针

Typedef void(*sys_run_func)(void);

定义二维数组:

sys_run_func sys_run_func_table[][30]={

{sys_state1,…},…, {sys_state10,…}

};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值