回调函数、递归函数、可重入函数

参考:http://blog.csdn.net/callmeback/article/details/4242260

1.什么是回调函数

回调函数就是一个被作为参数传递的函数。

因为可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数
回调函数在实际中有许多作用。假设有这样一种情况:我们要编写一个库,它提供了某些排序算法的实现(如冒泡排序快速排序shell排序、shake排序等等),为了能让库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑;或者,能让库可用于多种数据类型(int、float、string),此时,可以使用函数指针,并进行回调。
 

2.回调函数的例子

#include <stdio.h>
void printWelcome(int len)
{
  printf("welcome\n", len);
}

void printGoodbye(int len)
{
  printf("goodbye%d\n", len);
}

void callback(int times, void (* print)(int))
{
  int i;
  for (i = 0; i < times; ++i)
  {
    print(i);
  }
  printf("I am in callback function!\n\n");
}
void main(void)
{
  callback(10, printWelcome);
  callback(10, printGoodbye);
  printWelcome(5);
}

 

3.递归函数

编程语言中,函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。

 

4.可重入函数

可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的

 

posted @ 2016-01-11 16:32  wssheng  阅读(2119)  评论(0编辑  收藏  举报