typedef定义函数类型或函数指针

转载请标明出处;

  最近在看redis的代码,发现了有关函数指针的部分,想把它记下来。

  在redis中有类似下面的定义,利用typedef 定义了一个新的类型,这种类型是一个函数:

typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask);

  然后可以用这个类型定义一个指针,这个指针指向一个函数,具体redis中使用如下(具体redis的源码解析,后面的文章中还会提到):

    aeFileProc *rfileProc;
    aeFileProc *wfileProc;
 int aeCreateFileEvent(aeEventLoop *eventLoop, int fd, int mask,
        aeFileProc *proc, void *clientData)
{
    if (fd >= eventLoop->setsize) {
        errno = ERANGE;
        return AE_ERR;
    }
    aeFileEvent *fe = &eventLoop->events[fd];

    if (aeApiAddEvent(eventLoop, fd, mask) == -1)
        return AE_ERR;
    fe->mask |= mask;
    if (mask & AE_READABLE) fe->rfileProc = proc;
    if (mask & AE_WRITABLE) fe->wfileProc = proc;
    fe->clientData = clientData;
    if (fd > eventLoop->maxfd)
        eventLoop->maxfd = fd;
    return AE_OK;
}
时间: 2024-10-12 21:25:50

typedef定义函数类型或函数指针的相关文章

#define与typedef定义的类型名的区别

1.可以用其他类型说明符对#define定义的类型名进行扩展,但对typedef所定义的类型名不能这样做. 例如: #define peach int unsigned peach i; //加上unsigned类型说明符,正确! typedef int banana; unsigned banana i; //加上unsigned类型说明符,错误! 2.在连续的变量声明中,用typedef定义的类型能够保证声明中的所有变量均为同一种类型,而用#define定义的类型则无法保证. 例如: #de

C函数类型和函数指针使用方法详解

二.通常的函数调用 一个通常的函数调用的例子: /* 自行包含头文件 */ void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */ int main(int argc, char* argv[]) {    MyFun(10); /* 这里是调用MyFun(10) 函数 */    return(0); } void MyFun(int x) /* 这里定义一个MyFun函数 */ {    printf("%d\n",x); } 这个My

函数指针(函数指针作为函数形参/函数类型作为函数返回类型)

函数指针是指向函数的指针变量. 因此"函数指针"本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址.有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的.函数指针有两个用途:调用函数和做函数的参数. 1 #include<stdio.h> 2 int max(int

函数类型+WINAPI+函数名(例如inline DWORD static WINAPI RecordToKeys(const DRWT&amp; theDRWT,WTSBH* pKey,DWORD dwMaxNum)

winapi标识符在WINDEF.H定义,语句如下: #define winapi __stdcall 让我们说说这个__stdcall stdcall调用约定 stdcall很多时候被称为pascal调用约定,因为pascal是早期很常见的一种教学用计算机程序设计语言,其语法严谨,使用的函数调用约定就是stdcall.在Microsoft C++系列的C/C++编译器中,常常用PASCAL宏来声明这个调用约定,类似的宏还有winapi和callback. stdcall调用约定声明的语法为(以

python系列------函数类型--os函数库

我们从操作系统的的层次去学习os函数库的基本知识: 1.操作系统的类型 2.执行操作系统命令 3.所在路径 4.创建目录 5.删除文件 6.删除目录 7.更改路径 8.得到目录下的内容 1.os.name 函数 功能:获取当前使用的操作系统(获取信息不够详细) 其中 'nt' 是 windows,'posix' 是linux 或者 unix >>> import os >>> system_type=os.name >>> if system_type

用typedef定义函数指针类型(转)

typedef可以用于定义函数指针类型: [语法]typedef <返回类型> (*<函数类型名>)(参数表)typedef <返回类型> (<类名>::*<函数类型名>)(参数表) [用途]1.可以用来定义该函数类型的函数指针,就不用每次使用函数指针都要写一次函数原型了:2.有了类型名,就可以使用在容器里面,譬如map<int, 类型名>,用于实现灵活的函数调用. [示例] 例1:typedef void (*PF)(int x);

C++-------定义函数类型

函数重载和函数指针 int func(int a,int b) { cout<<"func"<<endl; return 0; } int func(int a,int b,int c) { cout<<"func(int,int,int)"<<endl; return 0; } //1.定义一种函数类型 typedef int(MY_FUNC)(int ,int); //定义MY_FUNC的函数类型,返回值是int,

函数重载(续)==》函数重载和函数指针在一起

函数重载与函数指针(这一块很重要,后续要继续学习): 当使用重载函数名对函数指针赋值时 根据重载规则挑选与函数指针参数列表一致的候选者 严格匹配候选者的函数类型与函数指针的函数类型 #include <iostream> using namespace std; void myFunc(int a) {     printf("a:%d\n",a); } void myFunc(char *p) {     printf("p:%s\n",p); } v

小猪猪C++笔记基础篇(六)参数传递、函数重载、函数指针、调试帮助

小猪猪C++笔记基础篇(六) ————参数传递.函数重载.函数指针.调试帮助 关键词:参数传递.函数重载.函数指针.调试帮助 因为一些事情以及自己的懒惰,大概有一个星期没有继续读书了,已经不行了,赶紧写一篇压压惊.把我文章抱走的同学留个言嘛. 函数在变成里面是一个非常重要的组成部分,那么这一部分我们先简单的介绍一下参数是如何传递进入函数,函数如何返回结果的.然后我们再来看看函数重载是个什么样的机制,最后在介绍一下所谓的函数指针到底是个什么东西.那么直接开始正题吧: 一.函数的参数传递 我们知道函