【问题标题】:Unfamiliar C syntax?不熟悉的 C 语法?
【发布时间】:2013-03-29 16:23:49
【问题描述】:

我正在尝试理解其他人编写的 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。

【问题讨论】:

    标签: c libuv


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      &server - 获取服务器地址

      (uv_stream*) - 转换为 uv_stream 指针

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2015-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多