C语言接口编写|函数指针

定义

C语言中,没有interface这个语法,因此上面的代码在C语言中,需要用struct 来实现。具体包括:

  1. 每个接口函数,需要声明一个单独的函数指针类型;
  2. 整个interface的方法集,用一个struct来表示,struct的成员为各个函数指针
  3. 每个文件系统的实现者,各自需要一个struct来表示,这个struct的类型对调用者不可见。各个文件系统有自己的struct结构,彼此互不相同,也互不可见。
  4. 接口的实现,包括两部分:1)接口函数的实现;2)文件系统的struct实例。这两部分放在一起,构成了接口的实现。我们用一个struct来把这两部分组合在一起。
  5. 由于各个文件系统的struct结构,对调用者不可见,因此文件系统用void*把自己的struct指针传递给调用者。

代码参考

#include <stdio.h>
#include <stdlib.h>

typedef void(*FunType)(int);
//前加一个typedef关键字,这样就定义一个名为FunType函数指针类型,而不是一个FunType变量。
//形式同 typedef int* PINT;
void myFun(int x);
void hisFun(int x);
void herFun(int x);
void callFun(FunType fp,int x);
int main()
{
    callFun(myFun,100);//传入函数指针常量,作为回调函数
    callFun(hisFun,200);
    callFun(herFun,300);

    return 0;
}

void callFun(FunType fp,int x)
{
    fp(x);//通过fp的指针执行传递进来的函数,注意fp所指的函数有一个参数
}

void myFun(int x)
{
    printf("myFun: %d\n",x);
}
void hisFun(int x)
{
    printf("hisFun: %d\n",x);
}
void herFun(int x)
{
    printf("herFun: %d\n",x);
}

参考

posted @ 2022-12-21 18:43  ethon-wang  阅读(234)  评论(0编辑  收藏  举报