不熟悉的C语法



我正在努力理解别人写的C代码,并且遇到了一段代码,我不理解所有的语法和我不理解的部分,我不知道如何搜索。我将感激无论是解释或信息如何搜索这个和其他类似的事情,我可能会遇到,或两者兼而有之。所讨论的代码如下行:

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

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

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

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

根据你的帖子中的其他信息,似乎serveruv_tcp_t类型,但uv_listen想要一个指向uv_stream_t的指针。这就是为什么要将server的地址强制转换为uv_stream_t*

注意:这只是因为libuv如何定义uv_tcp_tuv_server_t才有意义-通常你不能仅仅将指针类型转换为其他指针类型并期望发生任何合理的事情。

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

&server -获取服务器地址

(uv_stream*) -转换为uv_stream指针

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

假设'server'的类型不是uv_stream_t或子类,但编码器知道将其视为一个是安全的。

最新更新