嵌入式学习笔记 - 用typedef定义函数指针
在C语言中,typedef
是一个关键字,用于为已有的数据类型定义一个新的名称(别名),同样它也可以为函数定义别名。
一 直接定义函数指针的方式
我们只知道直接定义一个函数指针的方式如下:
int (*func_ptr)(int, int);
定义一个指向【返回int且接受两个int参数的】函数指针
二 使用typedef定义函数指针的方式
(1) 先定义函数类型再定义指针:
typedef void FUNC_TYPE(int, char); // 定义函数类型
FUNC_TYPE *pFunc = func;
(2) 直接定义函数指针类型:
typedef void (*FUNC_TYPE2)(int, char); // 定义函数指针类型
FUNC_TYPE2 pFunc2 = func;
三 语法解释
使用typedef定义函数指针的基本语法:
typedef 返回类型 (*函数指针类型)(参数类型);
示例:
假设我们有一个函数:
int add(int a, int b) {
return a + b;
}
我们可以定义一个指向该函数的指针类型,如下所示:
typedef int (*AddFuncPtr)(int, int);
这里,AddFuncPtr
就是函数指针的类型,它指向一个接受两个int
类型参数并返回一个int
类型值的函数。
定义了函数指针类型后,你可以像使用其他数据类型一样使用它。例如,声明一个函数指针变量,并将它指向add
函数:
AddFuncPtr ptr = add; // 使用函数名初始化指针
ptr(2, 3); // 通过指针调用函数,输出 5
四 FreeRTOS示例
freeRTOS任务创建函数第一个形参就使用了tepedef 定义函数指针的方式定义任务函数入口,如下:
typedef void (*TaskFunction_t)( void * );
由以上分析可知,上述代码的意思是定义了一个返回void类型(无返回),并接受void*类型指针的函数指针。
可以指向无返回类型的接收任何参数的一个函数。