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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/120040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简述JVM

文章目录 JVM简介JVM运行时数据区堆(线程共享)方法区/元空间/元数据区(线程共享)栈程序计数器 JVM类加载类加载过程双亲委派模型 垃圾回收机制(GC)判断对象是否为垃圾判断是否被引用指向 如何清理垃圾, 释放对象? JVM简介 JVM 是 Java Virtual Machine 的简称, 意为Java虚拟机…

VSCode:清理ipch缓存

VSCode使用了一段时间,发现有些变慢,电脑管家扫描后,提示“AppData\Local\Microsoft\vscode-cpptools\ipch”目录下有很多缓存文件可以清理。 查询了一下:C/C 扩展常见问题解答 (visualstudio.com) 该件夹内包含缓存的预编译头文…

WSL的秘钥被修改了要怎么弄

WSL的秘钥被修改了要怎么弄 gitgithub.com: Permission denied (publickey).ssh-add -l但是我是想加到github上的guiaguaide1.github.com里面哎,为什么这个是shengyi gitgithub.com: Permission denied (publickey). git push -u origin报错 aaaASUS:~/ML/paper/A…

kibana监控

采取方式 Elastic Agent :更完善的功能 Metricbeat:轻量级指标收集(采用) 传统收集方法:使用内部导出器收集指标,已不建议 安装 metricbeat Download Metricbeat • Ship Metrics to Elasticsearch | E…

基于Jenkins实现接口自动化持续集成

一、JOB项目配置 1、添加描述 可选选项可填可不填 2、限制项目的运行节点 节点中要有运行环境所需的配置 节点配置教程 3、源码管理 需要将脚本推送到远程仓库中 4、构建触发器 可以选择定时构建和轮询SCM 定时构建:根据设置的定时时间,自动执行定…

c++系列之vector类模拟实现

💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 构造函数 vector() //_begin表示有效成员的开始 //_finish表示有效成员的大小…

python实现批量pdf转txt和word

文章目录 背景需求环境安装完整代码效果 背景需求 已经获取到了大量的pdf在download文件夹中,但是我需要的是txt文件和word文件~ 环境安装 pip install pdf2docx pdfminer.six完整代码 # pip install pdf2docx pdfminer.siximport os from pdf2docx …

idea 基础设置

1、设置 IDEA 主题 2、自动导包和优化多余的包 3、同一个包下的类,超过指定个数的时候,导包合并为* 4、显示行号 , 方法和方法间的分隔符: 5、忽略大小写,进行提示 6、多个类不隐藏,多行显示 7、设置默认的…

面试题 05.01. 插入

​​题目来源: leetcode题目,网址:面试题 05.01. 插入 - 力扣(LeetCode) 解题思路: 截取 N 第 j 位到 31 位,M 低 j-i1 位,N 低 i 位,拼接即可。 解题代码:…

sys.dm_exec_requests中statement_start_offset与statement_end_offset

文章目录 1.缘起2.根因3.示例4.附录 1.缘起 mssql中查早阻塞与及其相关联的sql时,遇到如下内容,故记录一下, substring(dest_blocked.text,der.statement_start_offset/21,(case when der.statement_end_offset-1 then DATALENGTH(der.sta…

Kotlin数据流概览

文章目录 一 什么是数据流二 创建数据流三 修改数据流四 从数据流中进行收集五 数据流捕获异常六 在不同 CoroutineContext 中执行七 Jetpack 库中的数据流八 将基于回调的 API 转换为数据流 一 什么是数据流 数据流以协程为基础构建,可提供多个值。从概念上来讲&a…

如何确定Apache Kafka的大小和规模

调整或扩展Kafka以获得最佳成本和性能的第一步是了解数据流平台如何使用资源。这里给一些实用的建议。 实现Apache Kafka的团队,或者扩展他们对强大的开源分布式事件流平台的使用,通常需要帮助理解如何根据他们的需求正确地调整和扩展Kafka资源。这可能…

TensorFlow学习:使用官方模型和自己的训练数据进行图片分类

前言 教程来源:清华大佬重讲机器视觉!TensorFlowOpencv:深度学习机器视觉图像处理实战教程,物体检测/缺陷检测/图像识别 注: 这个教程与官网教程有些区别,教程里的api比较旧,核心思想是没有变…

分享一下怎么做多门店商城系统

随着互联网的快速发展,传统实体店面临着巨大的挑战。为了更好地适应市场变化,提高竞争力,多门店商城系统应运而生。这种新型的商业模式,旨在通过线上线下融合,实现门店之间的互联互通,提高运营效率&#xf…

PyQt5的一些问题(持续更新中)

以后会不定时更新 PyQt5警告 DeprecationWarning: sipPyTypeDict() is deprecated, the extension module should use sipPyTypeDictRef() instead https://stackoverflow.com/questions/77333277/deprecationwarning-sippytypedict-is-deprecated-pyqt5 要么升级Python版本…

【会议征稿通知】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)

2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024) 2024 4th International Conference on Neural Networks, Information and Communication Engineering 2024第四神经网络、信息与通信工程国际学术会议(NNICE 2024&#xff0…

物理世界的互动之旅:Matter.js入门指南

本文简介 戴尬猴,我是德育处主任 欢迎来到《物理世界的互动之旅:Matter.js入门指南》。 本文将带您探索 Matter.js,一个强大而易于使用的 JavaScript 物理引擎库。 我将介绍 Matter.js 的基本概念,包括引擎、世界、物体和约束等…

CSS笔记-狂神

1、什么是CSS 如何学习 CSS是什么CSS怎么用(快速入门)CSS选择器(重点难点)美化网页(文字,阴影,超链接,列表,渐变…)盒子模型浮动定位网页动画(特…

【IO面试题 二】、怎么用流打开一个大文件?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:怎么用流打开一个大文件…

手写效果流式响应(langchain+fastapi+js)

这是一个前后端完整可用的小项目 后端是 Python 的 FastAPI 框架,调用 langchain 进行 openai 的模型对话。前端是纯html css javascript,没调用任何第三方库,方便集成到 Vue React 等现有前端项目。 聊天界面: 效果就是提问之…