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 是 1 而不是 10。我认为问题的出现是因为我在其内部调用了“发送”函数。事实上,如果我把

return 10;

行前

result = send(VOTE_COMMIT, 1);

go_On 假定正确的值是 10。调用内部的“发送”函数是问题的根源吗?如何解决它,使返回值变为 10?

感谢所有会帮助我的人。

4

3 回答 3

3

您需要从 recusive 调用中返回值。
如果您将其他内容发送到函数中VOTE_REQUEST或发送VOTE_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 回答