C++关闭程序的方法

C++ Ways to shut down a program

本文关键字:方法 关闭程序 C++      更新时间:2023-10-16

在你开始在我身上浪费时间之前,请记住,这个问题更多的是关于知道这次关闭是否足够合法。

好吧。

我读过各种关闭程序的方法。我知道这总是最好的关闭程序,在最后!所以,正如我所说,我阅读了各种各样的主题,但我真的找不到一个我能正确理解的。所以我想出了自己的办法。我只是想确保这是一个好方法。

int main()
{
    cout << "Welcome to my fantastic program!" << endl;
    cout << "You're the first one to experience my command program!" << endl;
    cout << "Let's try with a simple command. Try typing help" << endl;
    while (running == 1) {
          commands();
          if (running == 0) {
             exit(0);
          }
    }
    return 0;
}

所以我想让你专注于while循环。这是我的方法。

void commands()
{
     cin >> command;
    if (command == "help")
    {
       cout << "-------------------------------" << endl;
       cout << "-this is the <HELP> section----" << endl;
       cout << "-exit (exits the program.)" << endl;
       cout << "-Stay tuned for more commands--" << endl;
       cout << "-------------------------------" << endl;
    }
    else if (command == "exit")
    {
       running = 0;
    }
    else
    {
        cout << "The command does not exist: " << command << endl;
    }
}

这是我的命令功能。如您所见,这会将"running"更改为0(或false)。我希望我能理解这一点。

谢谢。

编辑:我只想知道,如果这是一个好的方法:)

最终版本:好吧!我将"退出(0);"更改为"返回(0)!"。所以我想这是一个不错的方法!谢谢你的帮助!:)

在程序中使用exit()是合法的。尽管这通常是个坏主意。但是,如果程序由于某种奇怪的原因而无法返回,你可以这样做。

main()中使用exit是不礼貌的:我只是想不出一个合理的理由不使用return。

exit()和return from main之间的区别在于,前者将使从main到调用点的堆栈帧中的所有本地对象挂起,而不调用析构函数。只有静态/全局对象才能正确关闭。它可能会让代码的某些部分感到惊讶,并使重要的事情没有完成。

由于C++有很好的例外,我认为最好将exit()替换为抛出一些管理到main的东西,在main中会发生定期返回。

if (running == 0)但毫无意义!

while (running == 1) {
      commands();
}
return 0;

做同样的事情——一旦运行为0,它就会掉到循环的底部,main就会返回。全局running的整个想法都进入了副作用编程,这是一件坏事!

给定问题exit()中的边界条件,执行您想要的操作。它正常终止进程,为终止程序执行定期清理(atexit(),在没有自动存储的情况下销毁对象等)。

您并不真的想使用全局运行,所以我建议检查commands()的返回参数。

比如

int commands() 
{
   if(wanna_exit)
      return 1;
   else
      return 0;
}

如果由于某种原因,您不能让commands()中断while循环(例如,通过检查return参数并将running设置为0(如果它是1)),并且您想立即退出程序,而不是完成while循环的其余部分的求值,那么exit()是可以的(尽管在这种特殊情况下,return更好(因为您在示例中处于main))。尽量避免以全球化的身份参选——现在可能看起来很无辜,但以后可能会变得刻薄:)。