0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用回调函数降低程序耦合性?

STM32嵌入式开发 来源:CSDN 2023-06-16 17:22 次阅读

一、前言

耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。

编写代码有两个核心点:隔离变化、降低复杂度,而解耦是达到这两个目标的重要手段。

二、使用回调函数降低耦合

问题描述:

实现回家函数come_home,传入出发的时间,打印回家的方式以及到家的时间,有两种回家方式:开车、走路。其中开车需要1小时,走路需要3小时。

功能分析:

由于回家方式不同,所用时间不同,因此到家的时间不同,可以将come_home函数代码分为变化部分以及不变部分,将变化部分写在回调函数中,实现隔离变化的目的。

变化部分:

输出回家方式,根据出发时间,计算到家时间。

不变部分:

输出到家时间。

1、定义回调函数指针

typedef int (*on_arrival_t)(void* ctx, int departure_time);

2、编写come_home函数

void come_home(int departure_time, on_arrival_t on_arrival, void* ctx)
{
 int arrival_time = on_arrival(ctx, departure_time); /* 变化部分:调用回调函数计算到家时间 */
 printf("arrival_time: %d
", arrival_time);   /* 不变部分:打印到家时间 */
}

3、实现具体的回调函数

/* 开车回家 */
int on_drive(void* ctx, int departure_time) {
 int  arrival_time = departure_time + 1; /* 计算开车回家时间 */
 printf("drive
");      /* 打印回家方式 */


 return arrival_time;
}


/* 走路回家 */
int on_walk(void* ctx, int departure_time) {
 int  arrival_time = departure_time + 3; /* 计算走路回家时间 */
 printf("walk
");      /* 打印回家方式 */


 return arrival_time;
}

4、main函数

int main(int argc, char* argv[])
{
 come_home(17, on_drive, NULL); /* 17点开车回家 */
 come_home(17, on_walk, NULL); /* 17点走路回家 */
 
 return 0;
}

5、输出

0df59604-0c25-11ee-962d-dac502259ad0.png




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11521

原文标题:使用回调函数降低程序耦合性

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言使用回函数模拟委托与反射

    函数是C语言的核心概念。主调函数(caller)调用被函数(callee)是一般的调用关系,如果被
    发表于 08-03 16:12 441次阅读

    函数小结

    ,或者初步代码完成后仍然会根据用户需求添加很多的针对某种情况的处理方法,这时考虑采用回函数方法 总之为系统功能扩展、需通过一种接口处理很多种情况,上下级隔离时,就要考虑使用回
    发表于 07-05 01:51

    pwm程序停止调用回函数

    会做一个PWM,但有一个问题。搜索之后,我在这个论坛上找到了一个帖子,PWM不适用于动态定时器驱动程序,所以我把它转换成静态的。pwm开始工作得很好,但是程序停止调用回
    发表于 03-05 10:05

    请问LWIP协议中是怎样自动调用回函数?

    请问各位大神,LWIP协议中是怎样自动调用回函数的呢?这个原理一直不太理解,求教!!
    发表于 03-24 22:29

    使用回函数,button消失怎么回事

    就消失了。是不是不能再窗口的回函数里,再使用回函数的?我的目的是,使用机械键盘从页面聚焦到button上。但是焦点一直找不到。有大神能告
    发表于 05-20 11:11

    请问zigbee中什么时候用回函数

    我是zigbee新手,想问一下zigbee中什么时候用回函数???能用通俗的话给讲解一下吗?谢谢求大神指点
    发表于 08-26 08:01

    C语言回函数是什么

    什么是回函数?为什么要使用回函数?怎么使用回
    发表于 12-28 07:11

    用DMA去读取电压都会调用回函数的解决办法

    希望用DMA去读取电压,但是每次转化完成后都会调用回函数,这样太浪费CPU了,解决办法如下:默认是开启了中断,但是只要调用HAL_NVIC_DisableIRQ(DMA2_Stream0_IRQn);把中断关闭即可...
    发表于 08-16 08:38

    函数的作用是什么?怎么使用回函数

    什么是js回函数?回函数的作用是什么?怎么使用回函数
    发表于 11-01 06:10

    怎样去写回函数呢?怎样去使用回函数

    函数的作用是什么?单片机怎么用回函数在不同文件之间传递数据呢?怎样去写回
    发表于 02-23 07:40

    为什么单片机中断函数会使用回函数实现?

    为什么单片机中断函数会使用回函数实现
    发表于 09-20 07:50

    LabWindows/CVI 程序函数设计

    函数是系统框架设计中非常重要的一种手段,所谓回函数(callback )是指一个通过函数指针调用的
    发表于 05-03 16:54 1.1w次阅读
    LabWindows/CVI <b class='flag-5'>程序</b> 回<b class='flag-5'>调</b><b class='flag-5'>函数</b>设计

    C语言使用回函数模拟委托与反射

    函数是C语言的核心概念。主调函数(caller)调用被函数(callee)是一般的调用关系,如果被
    的头像 发表于 03-14 10:19 1254次阅读

    函数指针和回函数的使用方法

    了解开发语言的朋友应该都会对回函数有所了解,在很多的程序开发语言中都能看到回的身影。很多场景下,当某个条件成立以后我们希望代码执行某些指定的部分,这个时候可以考虑使
    的头像 发表于 04-10 15:08 1007次阅读

    如何使用C语言回函数降低程序耦合呢?

    耦合程序结构中各个模块之间相互关联的度量。它取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。
    的头像 发表于 02-22 11:34 486次阅读
    如何使用C语言回<b class='flag-5'>调</b><b class='flag-5'>函数</b><b class='flag-5'>降低</b><b class='flag-5'>程序</b><b class='flag-5'>耦合</b><b class='flag-5'>性</b>呢?