最近在代码中大量使用了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代码中对时间要求较高的代码要慎用。