2013-03-29 44 views
3

我想了解别人编写的C代码,并且遇到了一段代码,我不明白所有的语法和部分我不明白我不知道如何搜索。我希望得到解释或关于如何搜索我可能会遇到的其他类似事情的信息,或者两者兼而有之。有问题的代码是下面的行:不熟悉的C语法?

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

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

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

回答

7

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

基于在您的文章的其他信息,似乎serveruv_tcp_t类型,但uv_listen想要一个指针uv_stream_t。这就是为什么你采取server的地址,并将其投到uv_stream_t*

注:这不仅使因为libuv如何定义uv_tcp_tuv_server_t感 - 一般你不能只投指针类型的其他指针类型和期望什么合理的情况发生。

2

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

&服务器 - 服务器采取的地址

(uv_stream *) - 转换成uv_stream指针

0

uv_listen是一个函数,接受一个参数作为uv_stream_t指针。

好吧。

&server 

它通过&运营商得到的server地址,现在你有指针。

(uv_stream_t*) &server 

和上述代码中,施放该指针的uv_stream_t的指针。

现在你有什么功能需要。

0

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

推测'服务器'的类型不是uv_stream_t或者是子类,但是编码器知道可以安全地视为一个类。