C 有人能解释一下;g“io”创建“手表”;定义是什么?
我在分析GIOchannel,glib的源代码。有人能解释一下吗C 有人能解释一下;g“io”创建“手表”;定义是什么?,c,glib,C,Glib,我在分析GIOchannel,glib的源代码。有人能解释一下吗 GSource * g_io_create_watch (GIOChannel *channel,GIOCondition condition){ g_return_val_if_fail (channel != NULL, NULL); return channel->funcs->io_create_watch (channel, condition); //THIS LINE } “这条线”高
GSource * g_io_create_watch (GIOChannel *channel,GIOCondition condition){
g_return_val_if_fail (channel != NULL, NULL);
return channel->funcs->io_create_watch (channel, condition); //THIS LINE
}
“这条线”高于平均值?
我试图找出它指向哪个函数,但不明白。
该函数位于glib源代码的giochannel.c文件中
提前感谢。它看起来像是返回一个指向GSource类型的指针,它看起来像是一个函数指针。库GIO使用面向对象的技术,但用纯C编写 现在,直截了当地说:
:指向channel
对象的指针。那很容易GIOChannel
:是指向此channel->funcs
对象的虚拟表的指针。也就是说,指向函数的指针的结构。其思想是,GIOChannel
可能有几个实现,每个实现都有一个不同的函数表来实现特定的类GIOChannel
:是该channel->funcs->io_create_watch
对象的GIOChannel
函数的实现g_io_create_watch
:此表达式调用相关的给定虚拟函数并返回返回值returnchannel->funcs->io\u create\u watch(channel,condition)
g_io_create_watch
只是将调用转发到相应的虚拟函数。这是必要的,因为在GObject中,虚拟函数从不被视为公共函数,也就是说,客户端代码不应该直接调用它们
要了解其工作原理,请查看其中一些函数的具体实现,例如,对于普通Unix文件,请参阅
gionix.c
文件,特别是函数g_io_channel_Unix_new
和structUnix_channel_funcs
您的问题与标题完全不匹配。但这行的作用是调用函数指针;您应该检查GIOChannel.funcs的类型,然后检查该类型的io\u create\u watch
成员。