0

C 関数の戻り値に問題があります。

このように関数「送信」を呼び出すメイン関数があります。

int go_On;
go_On = send(VOTE_REQUEST, 1);

「送信」機能は次のように構成されます。

int send(int msg, int flag) {

  // inizialization of some parameters;

  if (msg == VOTE_REQUEST) {

    // Do some operations...

    result = send(VOTE_COMMIT, 1);
  }
  else if (msg == VOTE_COMMIT) {

    // Do some other operations...

    return 10;
  }
}

ここで、VOTE_REQUEST と VOTE_COMMIT は、ファイルの先頭で宣言されている定数です。

問題は、戻り値 go_On が 10 ではなく 1 になることです。この問題は、自分自身の中で「send」関数を呼び出すことによって発生すると思います。実際、私が置くならば

return 10;

行の前に

result = send(VOTE_COMMIT, 1);

go_On は正しい値 10 を想定しています。それ自体の内部での「send」関数の呼び出しが問題の原因ですか? 戻り値が10になるようにするにはどうすればよいでしょうか?

私を助けてくれるすべての人に感謝します。

4

3 に答える 3

3

再帰呼び出しから値を返す必要があります。関数以外または関数
に何かを送信する場合は、次のようなエラー値を返す必要があります。VOTE_REQUESTVOTE_COMMIT-1

int send(int msg, int flag) {

  // inizialization of some parameters;

  if (msg == VOTE_REQUEST) {

    // Do some operations...

    return send(VOTE_COMMIT, 1);
  }
  else if (msg == VOTE_COMMIT) {

    // Do some other operations...

    return 10;
  }

  return -1;
}
于 2012-09-29T15:04:38.083 に答える
1

return問題は、関数の最初のブランチにステートメントがないことです。これは未定義の動作です。

多分あなたはこれを意味します:

if (msg == VOTE_REQUEST)
{
    return send(VOTE_COMMIT, 1);
}
else if (msg == VOTE_COMMIT)
{
    return 10;
}

return -1;    // default
于 2012-09-29T15:04:21.810 に答える
0

関数send()では、次の場合に値を返しません。

msg == VOTE_REQUEST...

戻り値を追加してみてください...

int send(int msg, int param2)
{
    if(msg == VOTE_REQUEST)
        return send(VOTE_COMMIT, 1);
    else if(msg == VOTE_COMMIT)
        return 10;
    else
        return -1;
}
于 2012-09-29T15:05:34.003 に答える