IF语句参数更新和函数调用

时间:2015-03-23 07:24:20

标签: c if-statement for-loop embedded

我想调用另一个函数,而不是复制代码。

有两个函数,一个函数Ge​​tSlaves()返回一个扫描期间找到的许多从属。

事情是,我怀疑有时返回的值是不正确的,而奴隶是关闭或卡住。因此,如果我对找到的从站数量不满意,我想再次运行GetSlaves函数。请参阅下面的代码,问题如下。

SetSlaves(slaves)
{

  if (slaves<3 || slaves>6) // I expect 4 or 6 to be found
  {
    for (tmp2 = 0; tmp2<3; tmp2++) // Try 3 times
    {
        GetSlaves(); // This function will scan for new slaves and then call SetSlaves(slaves);
    }
  }
  else 
  {
      WriteFlash(VMSSlaves,slaves); // I am happy with what was found, Sets the number of slaves found
  }

}

我的问题是,当从For语句再次调用主函数时,它是否会更新 slaves 变量(例如返回4)并退出IF,因此也退出FOR。

或者,如果一个奴隶关闭并且这两个函数会无休止地相互调用,那么循环是否会无穷无尽?

2 个答案:

答案 0 :(得分:1)

这里存在一些严重的控制问题,它可能永远循环:当使用多个从属调用SetSlaves时,数字不符合您的喜好,调用GetSlaves,调用SetSlaves。即使数字是你喜欢的,它也会返回,只是在tmp2的循环中,调用再次调用SetSlaves的GetSlaves。如果现在这个数字不符合您的喜好,整个过程会重复,并且可以无限期地重复。请注意,这是一种间接的递归形式。

我的建议是让GetSlaves返回奴隶数量,并且调用者决定是否调用SetSlaves,而不是让GetSlaves调用SetSlaves。

答案 1 :(得分:0)

你是对的。如果if条件满足并且它进入for循环,则循环将是无限的。 在我看来,代码的结构有点不确定。我宁愿让骗子得到我的奴隶数量,也不要打电话给奴隶。