3

我正在尝试理解其他人编写的 C 代码,并且遇到了一段我不理解所有语法和我不理解的部分的代码,我不知道如何搜索。我将不胜感激有关如何搜索此内容和我可能遇到的其他类似事物的解释或信息,或两者兼而有之。有问题的代码是以下行:

int r = uv_listen((uv_stream_t*) &server, 128, on_new_connection);

我知道 r 是一个变量,它被声明并初始化为函数“uv_listen()”返回的值,128 是一个文字 int 参数,on_new_connection 必须是一个函数指针,因为这是回调函数的名称被称为。server 是一个自定义类型(uv_tcp_t)的变量,带有 & 是指服务器的地址。我不明白的是“(uv_stream_t *)&server”。看起来这是函数的参数之一。我可以理解返回值作为参数的函数调用,但这看起来不像函数调用。“uv_stream_t”是在他们的代码中定义的另一种自定义类型。

我不知道它是否有助于理解它的含义,但代码行来自编写的示例代码,以帮助理解如何使用 libuv。

4

3 回答 3

7

这只是一个类型转换。&server给出server变量的地址并(uv_stream_t*)转换该地址的类型。

根据您帖子中的其他信息,它似乎server是 type uv_tcp_t,但uv_listen需要一个指向uv_stream_t. 这就是为什么您获取地址server并将其转换为uv_stream_t*.

注意:这只是因为 libuv 定义的方式才有意义,uv_tcp_t而且uv_server_t——通常你不能只将指针类型转换为其他指针类型并期望任何合理的事情发生。

于 2013-03-29T16:25:37.887 回答
2

(uv_stream_t*) &server 获取服务器地址并将其转换为 uv_stream 指针。

&server - 获取服务器地址

(uv_stream*) - 转换为 uv_stream 指针

于 2013-03-29T16:26:11.307 回答
0

它是一个类型转换运算符,用于告诉编译器接受 &server 作为指向 uv_stream_t 的指针。

推测“服务器”的类型不是 uv_stream_t 或子类,但编码器知道将其视为一个是安全的。

于 2013-03-29T16:28:39.703 回答