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

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

3天内不再提示

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

STM32嵌入式开发 来源:CSDN 2024-02-22 11:34 次阅读

一、前言

耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。 编写代码有两个核心点:隔离变化、降低复杂度,而解耦是达到这两个目标的重要手段。

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

问题描述:

实现回家函数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、输出

98bf6b52-d132-11ee-a297-92fbcf53809c.png





审核编辑:刘清

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

    关注

    180

    文章

    7530

    浏览量

    128604
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11455

原文标题:C语言回调函数:降低程序耦合性

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

收藏 人收藏

    评论

    相关推荐

    函数

    C++内编写的DLL中有很多事件都是通过函数来反馈,LABVIEW如何可以调用
    发表于 11-06 15:36

    函数小结

    调用对应的函数)的这个过程就是函数回调过程,被函数称为
    发表于 07-05 01:51

    WM函数的区别

    , hWnd, WM_CF_SHOW, cbForegroundWin1, 0);的函数吗???有什么区别是怎么
    发表于 03-16 04:36

    请问LWIP中的函数如何传递参数?

    问题是“注册函数”中的“注册”怎么理解?从实验现象来看,似乎只要以太网收到了有效数据就会触发回
    发表于 03-27 04:35

    C 语言函数详解

    C 语言函数详解什么是
    发表于 04-08 10:36

    令人困扰的C 语言函数到底是何方神圣?看看这里,给你最好的解释!

    令人困扰的C 语言函数到底是何方神圣?看看这里,给你最好的解释!2. 为什么要使用回
    发表于 09-15 08:14

    C语言函数是什么

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

    ajax方法名使用什么事件,ajax的函数和匿名函数 精选资料分享

    1.什么是js函数一. 函数的作用js代码会至上而下一条线执行下去,但是有时候我们需要等
    发表于 09-01 07:15

    c语言函数的作用是什么,怎么使用

    知道怎么写回函数也根本就搞不懂它们在实际产品中也有什么用,什么时候用。所以这节课我们会以程序架构的需求为出发点,讲解
    发表于 11-30 06:09

    如何确定中断函数函数

    STM32编程时,如何确定中断函数函数名换句话说,就是如何找到中断
    发表于 12-06 06:21

    系统软件API的应用程序函数

    系统软件API导出许多在SDK项目的主函数中调用的应用程序函数。应用程序
    发表于 01-10 07:12

    定时器函数是如何进行工作的

    定时器函数是如何进行工作的
    发表于 01-21 07:56

    函数程序开发中有何作用

    函数程序开发中是一个非常重要的概念,所谓的其实就是不同
    发表于 03-01 07:13

    怎么才能在中断函数里用延时

    中断函数里不可以用 rt_thread_mdelay,怎么才能在函数里用延时
    发表于 04-20 09:32

    C/C++函数

    ;#125;在这个入门案例中,Callback_1、2、3就是函数,handle函数的第二个参数就是函数指针,也就是通过
    发表于 02-11 15:25