<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • C語言中回調(diào)函數(shù)如何使用

            本篇文章為大家展示了C語言中回調(diào)函數(shù)如何使用,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

            和平網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

             

            1 什么是回調(diào)函數(shù)?

            首先什么是“回調(diào)”呢?

            我的理解是:把一段可執(zhí)行的代碼像參數(shù)傳遞那樣傳給其他代碼,而這段代碼會(huì)在某個(gè)時(shí)刻被調(diào)用執(zhí)行,這就叫做回調(diào)。

            如果代碼立即被執(zhí)行就稱為同步回調(diào),如果過后再執(zhí)行,則稱之為異步回調(diào)

            回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來調(diào)用其所指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)。

            回調(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對該事件或條件進(jìn)行響應(yīng)。

             

            2 為什么要用回調(diào)函數(shù)?

            因?yàn)榭梢园颜{(diào)用者與被調(diào)用者分開,所以調(diào)用者不關(guān)心誰是被調(diào)用者。它只需知道存在一個(gè)具有特定原型和限制條件的被調(diào)用函數(shù)。

            簡而言之,回調(diào)函數(shù)就是允許用戶把需要調(diào)用的方法的指針作為參數(shù)傳遞給一個(gè)函數(shù),以便該函數(shù)在處理相似事件的時(shí)候可以靈活的使用不同的方法。

            C語言中回調(diào)函數(shù)如何使用  
            int Callback()    ///< 回調(diào)函數(shù)
            {
                // TODO
                return 0;
            }
            int main()     ///<  主函數(shù)
            {
                // TODO
                Library(Callback);  ///< 庫函數(shù)通過函數(shù)指針進(jìn)行回調(diào)
                // TODO
                return 0;
            }
             

            回調(diào)似乎只是函數(shù)間的調(diào)用,和普通函數(shù)調(diào)用沒啥區(qū)別。

            但仔細(xì)看,可以發(fā)現(xiàn)兩者之間的一個(gè)關(guān)鍵的不同:在回調(diào)中,主程序把回調(diào)函數(shù)像參數(shù)一樣傳入庫函數(shù)。

            這樣一來,只要我們改變傳進(jìn)庫函數(shù)的參數(shù),就可以實(shí)現(xiàn)不同的功能,這樣有沒有覺得很靈活?并且當(dāng)庫函數(shù)很復(fù)雜或者不可見的時(shí)候利用回調(diào)函數(shù)就顯得十分優(yōu)秀。

             

            3 怎么使用回調(diào)函數(shù)?

            int Callback_1(int a)   ///< 回調(diào)函數(shù)1
            {
                printf("Hello, this is Callback_1: a = %d ", a);
                return 0;
            }

            int Callback_2(int b)  ///< 回調(diào)函數(shù)2
            {
                printf("Hello, this is Callback_2: b = %d ", b);
                return 0;
            }

            int Callback_3(int c)   ///< 回調(diào)函數(shù)3
            {
                printf("Hello, this is Callback_3: c = %d ", c);
                return 0;
            }

            int Handle(int x, int (*Callback)(int)) ///< 注意這里用到的函數(shù)指針定義
            {
                Callback(x);
            }

            int main()
            {
                Handle(4, Callback_1);
                Handle(5, Callback_2);
                Handle(6, Callback_3);
                return 0;
            }
             

            如上述代碼:可以看到,Handle()函數(shù)里面的參數(shù)是一個(gè)指針,在main()函數(shù)里調(diào)用Handle()函數(shù)的時(shí)候,給它傳入了函數(shù)Callback_1()/Callback_2()/Callback_3()的函數(shù)名,這時(shí)候的函數(shù)名就是對應(yīng)函數(shù)的指針,也就是說,回調(diào)函數(shù)其實(shí)就是函數(shù)指針的一種用法。

             

            4 回調(diào)函數(shù)實(shí)例(很有用)

            一個(gè)GPRS模塊聯(lián)網(wǎng)的小項(xiàng)目,使用過的同學(xué)大概知道2G、4G、NB等模塊要想實(shí)現(xiàn)無線聯(lián)網(wǎng)功能都需要經(jīng)歷模塊上電初始化、注冊網(wǎng)絡(luò)、查詢網(wǎng)絡(luò)信息質(zhì)量、連接服務(wù)器等步驟,這里的的例子就是,利用一個(gè)狀態(tài)機(jī)函數(shù)(根據(jù)不同狀態(tài)依次調(diào)用不同實(shí)現(xiàn)方法的函數(shù)),通過回調(diào)函數(shù)的方式依次調(diào)用不同的函數(shù),實(shí)現(xiàn)模塊聯(lián)網(wǎng)功能,如下:

            /*********  工作狀態(tài)處理  *********/
            typedef struct
            {
             uint8_t mStatus;
             uint8_t (* Funtion)(void); //函數(shù)指針的形式
            } M26_WorkStatus_TypeDef;  //M26的工作狀態(tài)集合調(diào)用函數(shù)


            /**********************************************
            ** >M26工作狀態(tài)集合函數(shù)
            ***********************************************/
            M26_WorkStatus_TypeDef M26_WorkStatus_Tab[] =
            {    
                {GPRS_NETWORK_CLOSE,  M26_PWRKEY_Off  }, //模塊關(guān)機(jī)
                {GPRS_NETWORK_OPEN,  M26_PWRKEY_On  }, //模塊開機(jī)
                {GPRS_NETWORK_Start,   M26_Work_Init  }, //管腳初始化
                {GPRS_NETWORK_CONF,  M26_NET_Config  }, /AT指令配置
                {GPRS_NETWORK_LINK_CTC,  M26_LINK_CTC  }, //連接調(diào)度中心  
                {GPRS_NETWORK_WAIT_CTC, M26_WAIT_CTC  },  //等待調(diào)度中心回復(fù) 
                {GPRS_NETWORK_LINK_FEM, M26_LINK_FEM  }, //連接前置機(jī)
                {GPRS_NETWORK_WAIT_FEM, M26_WAIT_FEM  }, //等待前置機(jī)回復(fù)
                {GPRS_NETWORK_COMM,  M26_COMM   }, //正常工作    
                {GPRS_NETWORK_WAIT_Sig,  M26_WAIT_Sig  },  //等待信號(hào)回復(fù)
                {GPRS_NETWORK_GetSignal,  M26_GetSignal  }, //獲取信號(hào)值
                {GPRS_NETWORK_RESTART,  M26_RESET   }, //模塊重啟
            }
            /**********************************************
            ** >M26模塊工作狀態(tài)機(jī),依次調(diào)用里面的12個(gè)函數(shù)   
            ***********************************************/
            uint8_t M26_WorkStatus_Call(uint8_t Start)
            {
                uint8_t i = 0;
                for(i = 0; i < 12; i++)
                {
                    if(Start == M26_WorkStatus_Tab[i].mStatus)
                    {          
                  return M26_WorkStatus_Tab[i].Funtion();
                    }
                }
                return 0;
            }
             

            上述內(nèi)容就是C語言中回調(diào)函數(shù)如何使用,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

            文章題目:C語言中回調(diào)函數(shù)如何使用
            URL分享:http://www.jbt999.com/article30/jhdiso.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、虛擬主機(jī)標(biāo)簽優(yōu)化、做網(wǎng)站電子商務(wù)、網(wǎng)站排名

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

            小程序開發(fā)

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 欧美日韩黄片 | 爱草av | 久久久久久中文字幕 | 日本黄色片一级有吗 | 日韩成人性爱 |