如何退出C ++控制台程序?

时间:2010-10-27 22:39:21

标签: c++ exit

是否有一行代码会终止程序?

像python的sys.exit()

13 个答案:

答案 0 :(得分:26)

虽然可以调用exit()(如果您的应用程序遇到致命错误,可能需要这样做),退出程序的最简洁方法是从{{1}返回}:

main()

当您调用int main() { // do whatever your program does } // function returns and exits program 时,具有自动存储持续时间(本地变量)的对象在程序终止之前不会被销毁,因此您无法进行适当的清理。这些对象可能需要清理它们拥有的任何资源,保留任何挂起的状态更改,终止所有正在运行的线程,或执行其他操作以使程序干净地终止。

答案 1 :(得分:19)

#include <cstdlib>
...
exit( exit_code );

答案 2 :(得分:7)

有几种方法可以使程序终止。哪一个是合适的取决于您希望程序终止的原因。绝大部分时间都应该在main函数中执行return语句。如下所示。

int main()
{
     f();
     return 0;
}

正如其他人已经确定的那样,这样可以正确地破坏所有堆栈变量,以便正确清理。这非常重要。

如果您在代码深处某处检测到错误,并且需要退出,则应抛出异常以返回main函数。如下所示。

struct stop_now_t { };
void f()
{
      // ...
      if (some_condition())
           throw stop_now_t();
      // ...
}

int main()
{
     try {
          f();
     } catch (stop_now_t& stop) {
          return 1;
     }
     return 0;
 }

这会导致堆栈被解除所有要被破坏的堆栈变量。仍然非常重要。请注意,使用非零返回值指示失败是合适的。

如果在不太可能的情况下,您的程序检测到一个条件,表明执行更多语句不再安全,那么您应该使用std :: abort()。这将使您的程序突然停止,无需进一步处理。 std :: exit()是类似的,但可能会调用atexit处理程序,如果你的程序被充分borked可能会很糟糕。

答案 3 :(得分:4)

是的! exit()。它位于<cstdlib>

答案 4 :(得分:3)

允许执行流程returning a value or allowing execution to reach the end of the functionmain是程序应该终止的方式,除非在不可恢复的情况下。在C ++中返回值是可选的,但我通常更喜欢返回在cstdlib中找到的EXIT_SUCCESS(一个特定于平台的值,表示程序已成功执行)。

#include <cstdlib>

int main(int argc, char *argv[]) {
  ...
  return EXIT_SUCCESS;
}

但是,如果您的程序达到不可恢复状态,则应该抛出异常。然而,重要的是要意识到这样做的含义。没有广泛接受的最佳实践来决定什么应该或不应该是一个例外,但是你需要注意一些一般规则。

例如,从析构函数中抛出异常几乎总是一个可怕的想法,因为被破坏的对象可能已经被破坏,因为已经抛出异常。如果抛出第二个异常,则调用terminate并且您的程序将暂停,而不执行任何进一步的清理。您可以使用uncaught_exception来确定它是否安全,但通常更好的做法是永远不要让异常留下析构函数。

虽然通常总是可以调用但是没有写入的函数抛出异常(例如,如果new无法分配足够的内存,std::bad_alloc会抛出#include <stdexcept> #include <cstdlib> #include <iostream> int foo(int i) { if (i != 5) { throw std::runtime_error("foo: i is not 5!"); } return i * 2; } int main(int argc, char *argv[]) { try { foo(3); } catch (const std::exception &e) { std::cout << e.what() << std::endl; return EXIT_FAILURE; } return EXIT_SUCCESS; } ),通常很难初学者程序员要跟踪甚至了解C ++中有关异常的所有特殊规则。出于这个原因,我建议只在没有合理的方法继续执行的情况下使用它们。

exit

abort是来自C的保留,可能导致自动存储的对象无法正常清理。 terminateexit有效地导致程序自杀,绝对不会清理资源。

无论您做什么,都不要使用例外abortterminate / {{1}}作为拐杖来绕过编写结构合理的程序。保存它们以适应特殊情况。

答案 5 :(得分:2)

如果你在主要职位,你可以这样做:

return 0;  

exit(exit_code);

退出代码取决于代码的语义。 1是正常退出时的错误0。

在你的程序的其他一些功能中:

exit(exit_code)  

将退出该程序。

答案 6 :(得分:0)

在main()中,还有:

return 0;

答案 7 :(得分:0)

#include <cstdlib>
...
/*wherever you want it to end, e.g. in an if-statement:*/
if (T == 0)
{
exit(0);
}

答案 8 :(得分:0)

SO post提供了答案并解释了为什么不使用exit()的原因。值得一读。

简而言之,您应该在main()中返回0,因为它将运行所有析构函数并进行对象清除。如果您退出错误,也可以进行抛出。

答案 9 :(得分:0)

返回主目录,应返回EXIT_FAILURE,

或std :: terminate()(如果已损坏)。

(摘自Martin York的评论)

答案 10 :(得分:-1)

else if(Decision >= 3)
    {
exit(0);
    }

答案 11 :(得分:-4)

出口(0); //在关闭大括号之前的main函数结尾处

答案 12 :(得分:-4)

够简单..

退出(0); } //功能结束

确保0的两侧都有空格。如果没有空格,程序将不会停止。