我正在阅读linux内核代码,遇到类似以下内容:
typedef void (* gps_location_callback)(GpsLocation* location)
然后它可以像:
一样使用gps_location_callback location_cb;
有人可以告诉我这种typedef是什么意思吗?我之前从未见过这样的东西.. 谢谢!
答案 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
作为参数的函数,void
为GpsLocation*
。
因此,每次使用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
并且不返回任何内容。