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