為什么要使用回調函數


  最近在代碼中大量使用了callback函數,沒有google到大神關於是否要更多或更少的使用callback函數的論述,可能是這個問題太白痴了吧,暫且陳述一下自己的觀點。

  假如,有時候我們需要在邏輯上分2層,如下圖:

 

 1 |------------------|
 2 |          High Level         |
 3 |------------------|
 4 |          Low Level          |
 5 |------------------|
 6 //如果這樣寫
 7 int low_do_a(int xx)
 8 {
 9   hgih_do_b(xx);
10 }
11 
12 int hgih_do_b(int xx)
13 {
14   ...
15 }
16 int high_do_a(int)
17 {
18   ...
19   low_do_a(xx);
20   ...
21 }
   那么邏輯上可能是個樣子的:
  
  這種邏輯圖令我很不爽,因為我可能還需要知道
hgih_do_b是干什么的,層與層之間會有耦合,如HighLevel變了沒有high_do_b。
  那么如果以下面的形式加工一下:
 1  int low_do_a(int xx, int (*do_something)(int xx, void *param), void *param)
 2  {
 3      ...
 4       if (do_something)
 5      do_something(xxx, param);
 6      ...
 7  }
 8     
 9  int hgih_do_b(int xx, void *param)
10  {
11      ...
12 }
13  int high_do_a(int)
14 {
15   ...
16    low_do_a(xx, high_do_b, xxx);
17    ...
18  }
    這樣一看,雖然實際上還是調用了上層,但是靈活性大增加,上層可以定制某一部分下層的行為,而且邏輯上來看應該是這個樣子:
  
  這樣一看邏輯就清晰了很多。
  注:這樣做由於會有間接調用,因此,會有一些額外的傳參與訪存開銷,對於
MCU代碼中對時間要求較高的代碼要慎用。
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM