为什么要使用回调函数

时间:2022-06-01 23:33:59

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