我想调用另一个函数,而不是复制代码。
有两个函数,一个函数GetSlaves()返回一个扫描期间找到的许多从属。
事情是,我怀疑有时返回的值是不正确的,而奴隶是关闭或卡住。因此,如果我对找到的从站数量不满意,我想再次运行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。
或者,如果一个奴隶关闭并且这两个函数会无休止地相互调用,那么循环是否会无穷无尽?
答案 0 :(得分:1)
这里存在一些严重的控制问题,它可能永远循环:当使用多个从属调用SetSlaves时,数字不符合您的喜好,调用GetSlaves,调用SetSlaves。即使数字是你喜欢的,它也会返回,只是在tmp2的循环中,调用再次调用SetSlaves的GetSlaves。如果现在这个数字不符合您的喜好,整个过程会重复,并且可以无限期地重复。请注意,这是一种间接的递归形式。
我的建议是让GetSlaves返回奴隶数量,并且调用者决定是否调用SetSlaves,而不是让GetSlaves调用SetSlaves。
答案 1 :(得分:0)
你是对的。如果if条件满足并且它进入for循环,则循环将是无限的。 在我看来,代码的结构有点不确定。我宁愿让骗子得到我的奴隶数量,也不要打电话给奴隶。