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

IF Statement argument update and function recall

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

有两个函数,一个是 GetSlaves() returns 函数,其中包含在扫描期间找到的多个从机。

问题是,我怀疑有时返回的值不正确,而从站已关闭或卡住。因此,如果我对找到的奴隶数量不满意,我想再次 运行 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..

或者说,如果一个slave挂了,两个函数会无休止地互相调用,会不会死循环?

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

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

你是对的。如果满足if条件,则循环将无休止,并进入for循环。 在我看来,代码的结构有点不稳定。我宁愿让 getslaves 只获取我的奴隶数量,而不是调用 setslaves。