C++ 防止在C++;
我有一个类似于以下代码:C++ 防止在C++;,c++,c,main,C++,C,Main,我有一个类似于以下代码: int main() { 'some code' motors(); } int motors() { if (condition) { 'some code' main(); } else if (condition) { 'some code' main();
int main()
{
'some
code'
motors();
}
int motors()
{
if (condition)
{
'some
code'
main();
}
else if (condition)
{
'some
code'
main();
}
else
{
main();
}
}
我该怎么做才能避免反复呼叫main?我可以用main的代码做另一个函数吗 < P>调用<代码>主<代码>是C++中的未定义行为。您可以将
main
中原来的所有函数包装到另一个函数中
int main()
{
wrapper();
}
void wrapper()
{
//code originally in main
}
无论何时需要调用main
,都可以调用这个包装器
int motors()
{
if (condition)
{
wrapper();
}
有一个避免递归调用函数的简单方法:不要这样做!事实上,几乎不需要从程序内部调用
main
,我认为通常应该不惜一切代价避免调用它(除了像在中使用的那些“聪明的黑客”)
相反,您应该使用循环:
int main()
{
for (;;)
{
some_code_that_calls_motors();
}
}
然后从函数和调用链返回,直到返回到
main
,循环重新开始。“我该怎么做才能防止反复调用main?”只是不要从函数中调用它。从任何地方调用main都是一个未定义的bahaviorI考虑过这一点,但我需要刷新值,然后在motors函数中使用这些值。我需要回去检查一下主管道。我在问我是否可以使用另一个函数来检查这些值,或者这是同一件事吗?从哪里调用motors()
函数?@juanchopanza这不是我的意思。这正是我想要的。非常感谢。后续问题:当motors()调用wrapper()并完成wrapper()时,代码是从motors()中的最后一个位置继续还是motors()重新启动?正常的递归规则适用。如果将main
中的所有原始代码放入此包装函数,则它必须直接或间接地调用函数motor
。你需要确定这就是你想要做的。