防止在C ++中递归调用main()

时间:2013-11-10 14:53:11

标签: c++ c main

我有以下类似的代码:

int main()
{
    'some
     code'
     motors();
}

int motors()
{
     if (condition)
     {
          'some
           code'
           main();
     }
     else if (condition)
     {
          'some
           code'
           main();
     }
     else
     {
           main();
     }
}

我可以做些什么来阻止一遍又一遍地调用main?我可以使用main的代码创建另一个函数吗?

2 个答案:

答案 0 :(得分:5)

在C ++中调用main是未定义的行为。您可以将main中最初的所有函数包装到另一个函数中。

int main()
{
    wrapper();
}

void wrapper()
{
    //code originally in main
}

无论何时需要致电main,请改为调用此包装。

int motors()
{
     if (condition)
     {
         wrapper();
     }

答案 1 :(得分:2)

有一种简单的方法可以避免递归调用函数:不要这样做!事实上,很少需要从程序内部调用main,我认为通常应该不惜一切代价避免(除了the IOCCC中使用的“聪明的黑客”)。

相反,你应该使用循环:

int main()
{
    for (;;)
    {
        some_code_that_calls_motors();
    }
}

然后从函数和调用调用链返回,直到你回到main并重新开始循环。