0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用回調(diào)函數(shù)降低程序耦合性?

STM32嵌入式開發(fā) ? 來源:CSDN ? 2023-06-16 17:22 ? 次閱讀

一、前言

耦合性是程序結(jié)構(gòu)中各個(gè)模塊之間相互關(guān)聯(lián)的度量。它取決于各個(gè)模塊之間接口的復(fù)雜程度、調(diào)用模塊的方式以及哪些信息通過接口。

編寫代碼有兩個(gè)核心點(diǎn):隔離變化、降低復(fù)雜度,而解耦是達(dá)到這兩個(gè)目標(biāo)的重要手段。

二、使用回調(diào)函數(shù)降低耦合

問題描述:

實(shí)現(xiàn)回家函數(shù)come_home,傳入出發(fā)的時(shí)間,打印回家的方式以及到家的時(shí)間,有兩種回家方式:開車、走路。其中開車需要1小時(shí),走路需要3小時(shí)。

功能分析:

由于回家方式不同,所用時(shí)間不同,因此到家的時(shí)間不同,可以將come_home函數(shù)代碼分為變化部分以及不變部分,將變化部分寫在回調(diào)函數(shù)中,實(shí)現(xiàn)隔離變化的目的。

變化部分:

輸出回家方式,根據(jù)出發(fā)時(shí)間,計(jì)算到家時(shí)間。

不變部分:

輸出到家時(shí)間。

1、定義回調(diào)函數(shù)指針

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

2、編寫come_home函數(shù)

void come_home(int departure_time, on_arrival_t on_arrival, void* ctx)
{
 int arrival_time = on_arrival(ctx, departure_time); /* 變化部分:調(diào)用回調(diào)函數(shù)計(jì)算到家時(shí)間 */
 printf("arrival_time: %d
", arrival_time);   /* 不變部分:打印到家時(shí)間 */
}

3、實(shí)現(xiàn)具體的回調(diào)函數(shù)

/* 開車回家 */
int on_drive(void* ctx, int departure_time) {
 int  arrival_time = departure_time + 1; /* 計(jì)算開車回家時(shí)間 */
 printf("drive
");      /* 打印回家方式 */


 return arrival_time;
}


/* 走路回家 */
int on_walk(void* ctx, int departure_time) {
 int  arrival_time = departure_time + 3; /* 計(jì)算走路回家時(shí)間 */
 printf("walk
");      /* 打印回家方式 */


 return arrival_time;
}

4、main函數(shù)

int main(int argc, char* argv[])
{
 come_home(17, on_drive, NULL); /* 17點(diǎn)開車回家 */
 come_home(17, on_walk, NULL); /* 17點(diǎn)走路回家 */
 
 return 0;
}

5、輸出

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




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:使用回調(diào)函數(shù)降低程序耦合性

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    C語言使用回調(diào)函數(shù)模擬委托與反射

    函數(shù)是C語言的核心概念。主調(diào)函數(shù)(caller)調(diào)用被調(diào)函數(shù)(callee)是一般的調(diào)用關(guān)系,如果被調(diào)
    發(fā)表于 08-03 16:12 ?478次閱讀

    調(diào)函數(shù)小結(jié)

    ,或者初步代碼完成后仍然會(huì)根據(jù)用戶需求添加很多的針對某種情況的處理方法,這時(shí)考慮采用回調(diào)函數(shù)方法 總之為系統(tǒng)功能擴(kuò)展、需通過一種接口處理很多種情況,上下級隔離時(shí),就要考慮使用回
    發(fā)表于 07-05 01:51

    pwm程序停止調(diào)用回調(diào)函數(shù)

    會(huì)做一個(gè)PWM,但有一個(gè)問題。搜索之后,我在這個(gè)論壇上找到了一個(gè)帖子,PWM不適用于動(dòng)態(tài)定時(shí)器驅(qū)動(dòng)程序,所以我把它轉(zhuǎn)換成靜態(tài)的。pwm開始工作得很好,但是程序停止調(diào)用回調(diào)
    發(fā)表于 03-05 10:05

    請問LWIP協(xié)議中是怎樣自動(dòng)調(diào)用回調(diào)函數(shù)?

    請問各位大神,LWIP協(xié)議中是怎樣自動(dòng)調(diào)用回調(diào)函數(shù)的呢?這個(gè)原理一直不太理解,求教?。?/div>
    發(fā)表于 03-24 22:29

    使用回調(diào)函數(shù),button消失怎么回事

    就消失了。是不是不能再窗口的回調(diào)函數(shù)里,再使用回調(diào)函數(shù)的?我的目的是,使用機(jī)械鍵盤從頁面聚焦到button上。但是焦點(diǎn)一直找不到。有大神能告
    發(fā)表于 05-20 11:11

    請問zigbee中什么時(shí)候用回調(diào)函數(shù)?

    我是zigbee新手,想問一下zigbee中什么時(shí)候用回調(diào)函數(shù)???能用通俗的話給講解一下嗎?謝謝求大神指點(diǎn)
    發(fā)表于 08-26 08:01

    C語言回調(diào)函數(shù)是什么

    什么是回調(diào)函數(shù)?為什么要使用回調(diào)函數(shù)?怎么使用回調(diào)
    發(fā)表于 12-28 07:11

    用DMA去讀取電壓都會(huì)調(diào)用回調(diào)函數(shù)的解決辦法

    希望用DMA去讀取電壓,但是每次轉(zhuǎn)化完成后都會(huì)調(diào)用回調(diào)函數(shù),這樣太浪費(fèi)CPU了,解決辦法如下:默認(rèn)是開啟了中斷,但是只要調(diào)用HAL_NVIC_DisableIRQ(DMA2_Stream0_IRQn);把中斷關(guān)閉即可...
    發(fā)表于 08-16 08:38

    調(diào)函數(shù)的作用是什么?怎么使用回調(diào)函數(shù)

    什么是js回調(diào)函數(shù)?回調(diào)函數(shù)的作用是什么?怎么使用回調(diào)函數(shù)
    發(fā)表于 11-01 06:10

    怎樣去寫回調(diào)函數(shù)呢?怎樣去使用回調(diào)函數(shù)

    調(diào)函數(shù)的作用是什么?單片機(jī)怎么用回調(diào)函數(shù)在不同文件之間傳遞數(shù)據(jù)呢?怎樣去寫回調(diào)
    發(fā)表于 02-23 07:40

    為什么單片機(jī)中斷函數(shù)會(huì)使用回調(diào)函數(shù)實(shí)現(xiàn)?

    為什么單片機(jī)中斷函數(shù)會(huì)使用回調(diào)函數(shù)實(shí)現(xiàn)
    發(fā)表于 09-20 07:50

    LabWindows/CVI 程序調(diào)函數(shù)設(shè)計(jì)

    調(diào)函數(shù)是系統(tǒng)框架設(shè)計(jì)中非常重要的一種手段,所謂回調(diào)函數(shù)(callback )是指一個(gè)通過函數(shù)指針調(diào)用的
    發(fā)表于 05-03 16:54 ?1.1w次閱讀
    LabWindows/CVI <b class='flag-5'>程序</b> 回<b class='flag-5'>調(diào)</b><b class='flag-5'>函數(shù)</b>設(shè)計(jì)

    C語言使用回調(diào)函數(shù)模擬委托與反射

    函數(shù)是C語言的核心概念。主調(diào)函數(shù)(caller)調(diào)用被調(diào)函數(shù)(callee)是一般的調(diào)用關(guān)系,如果被調(diào)
    的頭像 發(fā)表于 03-14 10:19 ?1328次閱讀

    函數(shù)指針和回調(diào)函數(shù)的使用方法

    了解開發(fā)語言的朋友應(yīng)該都會(huì)對回調(diào)函數(shù)有所了解,在很多的程序開發(fā)語言中都能看到回調(diào)的身影。很多場景下,當(dāng)某個(gè)條件成立以后我們希望代碼執(zhí)行某些指定的部分,這個(gè)時(shí)候可以考慮使
    的頭像 發(fā)表于 04-10 15:08 ?1113次閱讀

    如何使用C語言回調(diào)函數(shù)降低程序耦合呢?

    耦合程序結(jié)構(gòu)中各個(gè)模塊之間相互關(guān)聯(lián)的度量。它取決于各個(gè)模塊之間接口的復(fù)雜程度、調(diào)用模塊的方式以及哪些信息通過接口。
    的頭像 發(fā)表于 02-22 11:34 ?618次閱讀
    如何使用C語言回<b class='flag-5'>調(diào)</b><b class='flag-5'>函數(shù)</b><b class='flag-5'>降低</b><b class='flag-5'>程序</b><b class='flag-5'>耦合</b><b class='flag-5'>性</b>呢?