爲何要使用回調函數

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

  假如,有時候咱們須要在邏輯上分2層,以下圖:google

 

 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代碼中對時間要求較高的代碼要慎用。
相關文章
相關標籤/搜索