函数指针——回调函数、函数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,…}

};

你可能感兴趣的:(c++,开发语言)