Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 防止在C++;_C++_C_Main - Fatal编程技术网

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
。你需要确定这就是你想要做的。