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」です。これは、関数のパラメーターの 1 つであるように見えます。値をパラメーターとして返す関数呼び出しは理解できましたが、これは関数呼び出しのようには見えません。「uv_stream_t」は、コードで定義されている別のカスタム タイプです。

それが何を意味するかを理解するのに役立つかどうかはわかりませんが、コード行は、libuv の使用方法を理解するのに役立つように書かれたサンプル コードからのものです。

4

3 に答える 3

7

ただの型キャストです。変数&serverのアドレスを与え、そのアドレスの型をキャストします。server(uv_stream_t*)

あなたの投稿の他の情報に基づいて、それserverはタイプのようですが、へのポインタが必要uv_tcp_tです。そのため、 のアドレスを取得して にキャストします。uv_listenuv_stream_tserveruv_stream_t*

注: これは、libuv が and を定義する方法にのみ意味がありますuv_tcp_tuv_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 またはサブクラスではありませんが、コーダーは 1 つとして扱われても安全であることを知っています。

于 2013-03-29T16:28:39.703 に答える