typedef void(* something)(someclass * something) - 这是什么意思?从未见过像这样的typedef用法

时间:2011-12-08 02:04:06

标签: c linux-kernel

我正在阅读linux内核代码,遇到类似以下内容:

typedef void (* gps_location_callback)(GpsLocation* location)

然后它可以像:

一样使用
gps_location_callback location_cb;

有人可以告诉我这种typedef是什么意思吗?我之前从未见过这样的东西.. 谢谢!

5 个答案:

答案 0 :(得分:5)

这是函数指针。此类型的变量指向其签名为void (GpsLocation*)的函数:

void foo(GpsLocation *);

gps_location_callback f = foo;

// now use f(p) etc

如果没有typedef,你必须写:

void (*f)(GpsLocation *) = foo;

答案 1 :(得分:3)

对于返回gps_location_callback并以typedef作为参数的函数,voidGpsLocation*

因此,每次使用ore声明类型为gps_location_callback的变量时,您正在使用或声明一个指向返回void的函数的函数指针,并获取{{1}的参数列表。

答案 2 :(得分:0)

它是一个函数的typdef *它用于执行回调

所以你可以这样做

if(location_cb != NULL)
{
    location_cb(my_gps_location);
}

回调适用于基于事件的事物,它允许您将函数传递给可在事件发生时调用的函数。例如,当你获得一个GPS位置时,请使用你已经获得的GPS来调用我的功能,这样我就可以做我自己的事情,比如将它保存到数据库中,或者在屏幕上显示它

答案 3 :(得分:0)

gps_location_callback函数指针的定义,其中函数不返回任何内容(void),并将指向GpsLocation的指针作为参数。

例如。如果你有这个功能:

void location_func(GpsLocation* location)

您可以将指向该函数的指针指定给location_cb,即

gps_location_callback location_cb = location_func;

答案 4 :(得分:0)

这使得gps_location_callback为函数指针的别名而取GpsLocation* location 作为论点并且什么都不返回;

在这个typedef中,你可以很容易地制作一个你想要的变量函数指针,并将其用作

gps_location_callback x,y,z;

现在你有三个函数指针,它将参数作为GpsLocation* location并且不返回任何内容。