1.假设有如下函数定义:
static struct kobject *base_probe(dev_t dev, int *part, void *data)
{
.....
}
2.现在要将base_probe函数作为参数传入
void __init chrdev_init(void)
{
cdev_map = kobj_map_init(base_probe, &chrdevs_lock);
}
3.kobj_map_init函数参数类型为kobj_probe_t *,这个参数类型和struct kobject *base_probe(dev_t dev, int *part, void *data)究竟是如何关联起来的?
struct kobj_map *kobj_map_init(kobj_probe_t *base_probe, struct mutex *lock)
{
.....
}
4.二者通过如下typedef定义关联:
typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
显然,该typedef定义了一个函数类型,定义函数类型的一般形式:"返回值 函数类型名(参数1,...,参数n)"
5.测试程序
#include <iostream>
using namespace std;
//下面两种定义是等价的,因为编译器将函数名隐式转换成函数指针
typedef int *(*func_t)(int,int);
//typedef int *func_t(int,int);
int gval = 0;
static int *addval(int a, int b)
{
gval = a+b;
return &gval;
}
static int *subval(int a, int b)
{
gval = a-b;
return &gval;
}
int getfun(func_t func, int a1, int a2)
{
return *func(a1, a2);
}
int main()
{
cout << getfun(addval, 3,6) << endl;
cout << getfun(subval, 4,1) << endl;
}