2013-03-29 45 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或者是子類,但是編碼器知道可以安全地視爲一個類。