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

Prevent from calling main() recursively in C++

本文关键字:调用 main 递归 C++      更新时间:2023-10-16

我有一个类似于以下内容的代码:

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

我该怎么做才能防止一遍又一遍地调用 main?我可以制作另一个包含 main 代码的函数吗?

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

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

每当您需要调用main时,请改为调用此包装器。

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

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

相反,您应该使用循环:

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

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