C Void**回调的混乱

C Void**回调的混乱,c,callback,glib,void-pointers,C,Callback,Glib,Void Pointers,我正在使用一个开源映射工具,它能够使用g_io_add_watch来监视文件描述符。我正在尝试观察stdin文件描述符,并且我已经成功地在stdin接收数据时调用了回调。然而,我无法读取这些数据。我正试图修改回调以接收开源api处理程序中描述的信息 编辑**我的问题首先是什么是空**以及在这种情况下如何使用它。我希望为我的回调函数提供您在下面看到的readUserInput_two函数所描述的参数,我需要通过下面描述的回调系统传递它。我不清楚我需要传递什么作为我的void**以允许当前实现传递这

我正在使用一个开源映射工具,它能够使用g_io_add_watch来监视文件描述符。我正在尝试观察stdin文件描述符,并且我已经成功地在stdin接收数据时调用了回调。然而,我无法读取这些数据。我正试图修改回调以接收开源api处理程序中描述的信息

编辑**我的问题首先是什么是空**以及在这种情况下如何使用它。我希望为我的回调函数提供您在下面看到的readUserInput_two函数所描述的参数,我需要通过下面描述的回调系统传递它。我不清楚我需要传递什么作为我的void**以允许当前实现传递这些参数

看起来像这样

readUserInput_two(GIOChannel *ioch, GIOCondition cond, gpointer data)
我想将此指针存储到回调中,该回调定义为

struct callback {
    void (*func)();
    int pcount;
    enum attr_type type;
    void *p[0];

};
在用于实例化回调的函数中,提供以下参数

callback_new(void (*func)(void), int pcount, void **p)
在这个调用中,pcount是函数指针应该具有的参数数量,我相信void**p是这些参数的类型或类似的类型,但我似乎无法理解

当启动回调时,它将调用在define语句中定义的函数,该语句看起来是这样的

#define callback_call_3(cb,p1,p2,p3) callback_call_args(cb, 3, p1, p2, p3)
此函数是为各种p的调用定义的,例如回调调用1(cb,p1)也存在。有人能解释一下我如何让回调函数接收这些数据字段吗。调用callback\u call\u 3的中间回调函数如下所示

static gboolean
navfocus_call_watch(GIOChannel * iochan, GIOCondition condition, gpointer t)
{
    struct callback *cb=t;
    if(cb->pcount == 1)//I added this if before it only had callback_call_0
    {
        callback_call_0(cb);
    }
    else if(cb->pcount == 4)
    {
        callback_call_3(cb,iochan,condition,t);
    }
    return TRUE;
}

void**
是指向void指针的指针类型

至于如何在您的案例中使用它,您必须查阅文档。从您发布的代码片段中我看不出来,变量名“p”也没有什么帮助

编辑:对于您的回调被提供给您的原始数据,回调函数没有任何参数。函数如何获取指针


Edit2:我明白了,这和pcount有关。但是回调的声明是错误的,因为它声明回调不接受任何参数…

A
void**
是指向void指针的指针类型

至于如何在您的案例中使用它,您必须查阅文档。从您发布的代码片段中我看不出来,变量名“p”也没有什么帮助

编辑:对于您的回调被提供给您的原始数据,回调函数没有任何参数。函数如何获取指针


Edit2:我明白了,这和pcount有关。但是回调的声明是错误的,因为它声明回调不接受任何参数…

void**是指向void类型数据(无类型)指针的指针。void*用作泛型类型,指向任何类型变量的基址。在这种情况下,void**需要保存多个void*变量。您可以将其称为void数组

要调用的函数有多种,这些函数基于从回调函数发送的参数数量。\u new()。有一些宏是为了方便而编写的

您需要将这些参数嵌入void**p。您可以按如下方式为void**p数组分配内存:

void **p = malloc(10 * sizeof *p);
您需要按照调用的最终函数所需的相同顺序嵌入它们

对于3参数函数:

p[0] = &iochan;
p[1] = &condition;
p[2] = &t;

现在将void**p发送到callback\u new(函数指针,3,p);正如您所解释的,将根据参数的数量调用相应的函数。

void**是指向void类型数据(无类型)指针的指针。void*用作泛型类型,指向任何类型变量的基址。在这种情况下,void**需要保存多个void*变量。您可以将其称为void数组

要调用的函数有多种,这些函数基于从回调函数发送的参数数量。\u new()。有一些宏是为了方便而编写的

您需要将这些参数嵌入void**p。您可以按如下方式为void**p数组分配内存:

void **p = malloc(10 * sizeof *p);
您需要按照调用的最终函数所需的相同顺序嵌入它们

对于3参数函数:

p[0] = &iochan;
p[1] = &condition;
p[2] = &t;

现在将void**p发送到callback\u new(函数指针,3,p);正如您所解释的,将根据参数的数量调用相应的函数。

我不明白您的问题是什么,您尝试了什么,什么不起作用??我不明白您的问题是什么,您尝试了什么,什么不起作用??