3

我如何解释以下 typedef 语句。

我已经通过类型转换获得了一些知识。它们用于将变量后面的字节重新解释为另一种类型。例子:

unsigned char* byte = (unsigned char*) (some signed char);

但现在我看到以下声明:

typedef void (*uv_read_cb)(uv_stream_t* stream, ssize_t nread, uv_buf_t buf);

https://github.com/bodokaiser/libuv/blob/master/include/uv.h#L314

让我完全困惑的是:

  • 没有 typedef 的名称
  • 我们如何对某些参数进行类型转换???

有人对这些有答案吗?

4

3 回答 3

5

typedef 确实有一个名字......uv_read_cb它是一个指向接受 a uv_stream_t*、 assize_tuv_buf_t参数并返回的函数的指针void

这允许您添加诸如指向结构中函数的指针、将函数指针传递给函数等内容,同时允许您定义可以将什么类型的函数分配给变量或传递...

typedef void (*uv_read_cb)(uv_stream_t* stream, ssize_t nread, uv_buf_t buf);

struct myVTable
{
    uv_read_cb  uv_read_callback;
};

void myVFunction(  uv_stream_t* stream, uv_read_db callback )
{
     ssize_t length = 100;
     uv_buf_t buf;
     myVTable table;

     table.uv_read_callback = callback;

     table.uv_read_callback( stream, length, buf );

     // or you could alternatively use 'callback( stream, length, buf );'
}
于 2013-05-07T16:39:04.947 回答
3

它是一个指向函数的指针,该函数获取uv_stream_t*ssize_tuv_buf_t,并返回 void。 uv_read_cb也是类型,您可以使用它来定义具有相同签名的其他函数。例如:

uv_read_cb my_func;
于 2013-05-07T16:39:35.547 回答
1

该语句定义uv_read_cb为指向返回 void 的函数的指针。

于 2013-05-07T16:45:10.983 回答