【问题标题】:Quit the whole program early in C?在 C 中尽早退出整个程序?
【发布时间】:2015-12-24 04:32:15
【问题描述】:

一般说我有一些函数step1step2...它们被依次调用:

int main()
{
  ...
  step1();  // something wrong detected and need to break out of the whole program
  step2();
  step3();
  ...
}

我怎样才能脱离step1 并跳过所有其余代码来终止main() 函数?

目前我只能想到将像bool isErr这样的全局变量设置为标志,以便

step1();  // error detected and isErr is set to 1 inside step1()
if (isErr)
  return;
step2();
...

是否有更好或更“规范”的方法?

顺便说一句,我听说goto 不好,所以我放弃了它:)

【问题讨论】:

  • How to quit a C++ program? 的可能重复项
  • 如果问题是由于您希望用户能够检查的某些数据流,std::abort() 可能是一个好主意,因为它会以信号退出进程并可能导致主机创建核心转储(使情况可通过多种方式调试)。
  • C 不是 C++ 不是 C!选一个!

标签: c terminate


【解决方案1】:

您可以使用exit() 函数在step1()step2()... 期间的任何时间点终止进程。

【讨论】:

    【解决方案2】:

    使用

    exit(1);
    

    数字表示退出状态。 0 表示没有失败,大于 0 的都表示错误。

    【讨论】:

    • C 中唯一可移植的返回值是 EXIT_SUCCESSEXIT_FAILURE(但不是 1)。
    • EXIT_FAILURE 定义为 1
    【解决方案3】:

    exit 将从您所在的任何地方终止程序,但在大多数情况下这是一个坏主意,检查函数的返回值和处理(例如,在您的情况下为退出)是一种更清洁的方法(不需要全局变量)

    【讨论】:

      【解决方案4】:

      一种选择是检查您的step1() 函数的返回值,如果它是错误的,只需在main 中使用例如return 1。使用main 中的return(带有适当的状态码)来完成程序是C++ 中的首选方式。

      其他选项是exit。关键是您可以在代码中的任何位置调用它。但是,在 C++ 中,exitnot 推荐的那么多。关于 C,有一个问题 here 讨论在 C 中使用 exit 是否是一个好主意。

      【讨论】:

        猜你喜欢
        • 2020-12-29
        • 1970-01-01
        • 1970-01-01
        • 2012-04-24
        • 2023-03-09
        • 2013-07-03
        • 1970-01-01
        • 2014-10-22
        • 1970-01-01
        相关资源
        最近更新 更多