最近在代碼中大量使用了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代碼中對時間要求較高的代碼要慎用。