在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*类型指针的函数指针。

可以指向无返回类型的接收任何参数的一个函数。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐