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