0

C クライアント サーバー プログラムを調べているときに、この問題が発生しました。コンパイラは、関数が「voidを返す関数で値を返す」と不平を言います。

私の質問は、単に返すのではなく、返す (NULL) のポイントは何ですか? これはおそらく、呼び出し元がガベージを返さないようにするためですか?

void *ThreadMain(void *threadArgs)
{
    int clntSock;                   /* Socket descriptor for client connection */

    /* Guarantees that thread resources are deallocated upon return */
    pthread_detach(pthread_self()); 

    /* Extract socket file descriptor from argument */
    clntSock = ((struct ThreadArgs *) threadArgs) -> clntSock;
    free(threadArgs);              /* Deallocate memory for argument */

    HandleTCPClient(clntSock);

    return (NULL);
}
4

3 に答える 3

3
 "return with a value, in function returning void".

戻り型を持つ他の関数があり、voidその関数から値を返しています。しかし、あなたが投稿した機能はその機能ではありません。基本的にあなたが投稿した関数はあなたの問題とは何の関係もありません:)

あなたが投稿したものは、void *とは異なる返品タイプを持っていますvoid。したがって、これはコンパイラが文句を言う機能ではありません。voidを返す(ではない)コード内の他の関数を見てくださいvoid *。そのうちの1つ(または複数)に戻りがあります。

于 2013-01-19T23:03:20.627 に答える
0

返す理由NULLは、「何もない」へのポインタを返すためです。

于 2013-01-19T22:56:05.713 に答える
0

「コントラクト」がポインターを返さなければならないと言っているので、彼は NULL を返しています。彼はどうやらコントラクトを変更できない/したくないようです。

于 2013-01-19T23:10:37.600 に答える