電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 89|回復(fù): 0
收起左側(cè)

回調(diào)函數(shù) callback 的實現(xiàn)原理是什么?

[復(fù)制鏈接]

418

主題

418

帖子

4293

積分

四級會員

Rank: 4

積分
4293
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-12-4 11:45:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
其實回調(diào)函數(shù)和普通函數(shù)沒有本質(zhì)的區(qū)別。首先讓我們來看看普通的函數(shù)調(diào)用,假設(shè)我們在A函數(shù)中調(diào)用函數(shù)func:
  • void A() {   ...   func();   ...}想一想,你怎么知道可以調(diào)用func呢?哦,原來func是你自己定義的:
  • void func() {  blablabla;}這很簡單吧,現(xiàn)在假設(shè)你編寫的這段代碼無比之牛逼,全世界的程序員都無比瘋狂的想引入到自己的項目中,這時你會把A函數(shù)編寫成一個庫供全世界的碼農(nóng)使用。但此時所有人都發(fā)現(xiàn)一個問題,那就是他們都想在A函數(shù)中的某個特定點上執(zhí)行一段自己的代碼,作為這個庫的創(chuàng)作者你可能會這樣實現(xiàn):
  • void A() {   ...    // 特定點      if (張三) {     funcA();   } else if (李四) {     funcB();   }   ...}假設(shè)全世界有一千萬碼農(nóng),那你是不是要有一千萬個if else。。。想想這樣的代碼就很刺激有沒有!更好的辦法是什么呢?把函數(shù)也當(dāng)做變量!你可以這樣定義A函數(shù):
  • void A(func f) {   ...   f();   ...}任何一個碼農(nóng)在調(diào)用你的A函數(shù)時傳入一個函數(shù)變量,A函數(shù)在合適的時機調(diào)用你傳入的函數(shù)變量,從而節(jié)省了一千萬行代碼。為了讓這個過程更加難懂一些,這個函數(shù)變量起了一個無比難懂的稱呼:回調(diào)函數(shù)。現(xiàn)在你應(yīng)該明白了回調(diào)函數(shù)是怎么一回事了吧,相比回調(diào)函數(shù)來說我更愿意將其看做函數(shù)變量。以上就是回調(diào)函數(shù)的基本原理,有想看更詳細版本的請參考這里。以上僅僅是回調(diào)函數(shù)的一種用途,回調(diào)函數(shù)在基于事件驅(qū)動編程以及異步編程時更是必備的,關(guān)于事件驅(qū)動編程你可以參考這里,GUI編程的同學(xué)對此肯定很熟悉。希望這里的講解對大家理解回調(diào)函數(shù)有所幫助。------------ END ------------



    ●專欄《嵌入式工具
    ●專欄《嵌入式開發(fā)》
    ●專欄《Keil教程》
    ●嵌入式專欄精選教程

    關(guān)注公眾號回復(fù)“加群”按規(guī)則加入技術(shù)交流群,回復(fù)“1024”查看更多內(nèi)容。
    點擊“閱讀原文”查看更多分享。
  • 回復(fù)

    使用道具 舉報

    發(fā)表回復(fù)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表