【问题标题】:C++ Ways to shut down a programC++ 关闭程序的方法
【发布时间】:2013-06-26 04:03:41
【问题描述】:

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

好的。

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

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;
    }
}

这是我的命令功能。如您所见,这会将“运行”更改为 0(或 false)。我希望我让这个足够理解。

谢谢。

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

最终编辑:好的!我改变了“退出(0);”到“返回(0);”。所以我想这是一个不错的好方法!谢谢你的帮助! :)

【问题讨论】:

  • 是的,这是understandable enough
  • 我的意思是,这是关闭它的合法方式吗?
  • 如果是这个问题:是的,exit() 是合法的。
  • raise(SIGSEGV) 不是!
  • 为什么不用简单的return 替换exit 调用?话虽如此,在这种情况下,退出调用很好。请注意,在更复杂的情况下,如果在堆栈展开期间抛出异常,请调用 exit can lead to a call to terminate

标签: c++ console-application dev-c++


【解决方案1】:

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

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

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

由于 C++ 有很好的异常,我认为最好将 exit() 替换为抛出可以管理到 main 的东西,在那里会定期返回。

【讨论】:

  • 我正在使用 return(0);而不是退出,现在。 :) 我会将其标记为答案,尽管问题中的 cmets 也在帮助我! :) 谢谢大家!
  • '我只是想不出一个理智的理由不使用 return 代替' - 静态 dtors 中的错误 :)
【解决方案2】:

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

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

完全一样 - 一旦运行为 0,它就会掉出循环的底部,并且 main 返回。全局running 的整个想法正在进入副作用编程,这是一件坏事!

【讨论】:

  • 完全相同的东西是什么?
  • 上述代码。您不需要调用 exit() - 只需从 main() 返回就足够了(在这种情况下,代码更清晰)
  • 某些嵌入式设备是否可以将这个主节点接受为可重复的,因此它们需要 exit(0) ?
  • @huseyintugrulbuyukisik:不。一些嵌入式设备确实会在main退出时重新启动,但不管前一个实例如何停止,它们都会这样做。
【解决方案3】:

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

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

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

如果你因为某种原因不能让 commands() 打破 while 循环(例如通过检查返回参数并将运行设置为 0,如果它是 1),并且你想立即退出程序而不是完成评估while 循环的其余部分然后 exit() 就可以了(尽管在这种特殊情况下 return 更好(因为您在示例中是 main ))。尽量避免以全局方式运行 - 现在可能看起来很无辜,但以后可能会变得卑鄙:)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多