【问题标题】:Why should I not use exit function in C? [duplicate]为什么我不应该在 C 中使用退出函数? [复制]
【发布时间】:2014-11-21 20:08:58
【问题描述】:

我一直在做一些学校项目,我用这个函数来输出错误:

void errorMsg(char* msg)
{
    fprintf(stderr, msg);
    exit(EXIT_FAILURE);
}

所以我可以这样做:

if (condition)
    errorMsg("Error, Wrong parameters.");

消息将显示给用户,程序将退出并显示错误代码。

但我因使用exit 函数而获得了减分。

所以我只是想知道我应该怎么做?除了在main函数中多次写这个之外,还有其他方法吗?

if (condition)
{
    fprintf(stderr, "Error, Wrong parameters.");
    return(EXIT_FAILURE);
}

感谢您的宝贵时间。

【问题讨论】:

  • 您应该询问给您的作品打分的人他们的期望。我们可以为您提供建议,但您真正需要的是了解评估员想要什么。如果我们的建议与他们的不符,那么您的情况也不会好到哪里去。
  • 你确定它是为exit 而不是char * - fprintf
  • 不管你是不是通过函数来​​做的,你的快速退出方法还是一样的。
  • @WeatherVane 编译器无法检查格式说明符的存在,因为字符串不是文字。使用%s, msgfputs
  • 通常,后面的问题会作为前面问题的副本关闭。这一次,我颠倒了这个过程,因为后面的问题比这个问题有更好的答案,尽管基本问题名义上涵盖了相同的领域。 FWIW:我经常在我的代码中使用与errorMsg() 等效的函数。除非有设计标准将其排除在外(例如“代码将进入库,因此不应单方面退出”),否则将代码设计为在紧急情况下调用 exit 是完全合理的。

标签: c error-handling exit


【解决方案1】:

这实际上取决于您如何编程,或者在这种情况下,取决于您的老师希望您如何编程。
在这种情况下,最好的答案是去找你的老师并要求解释为什么这是错误的。

当我用 C 编程时,我的所有函数总是返回 int(或 typedefint),然后我可以从函数返回错误。然后我的main 函数在返回时返回一个错误。像这样的模板:

int func(void)
{
    int return_value = 0;
    if (/* Some condition */) {
        return_value = 1
    }
    /* Some code */
    return return_value;
}

int main(void)
{
    int return_value = 0;
    return_value = func();
    return return_value
}

使用这个模板,如果有错误,main函数会返回1,如果成功则返回0。同样,您可以在main 函数中添加一个if 条件,以检查func 的返回值。这使您可以选择处理代码中的错误。

【讨论】:

    【解决方案2】:

    一个重要原因:
    如果您有一些代码已打开文件,但尚未完成写入,而这段代码将一些工作委托给将结束程序的函数,会发生什么?
    是的,你会得到一个损坏的文件。
    同样的推理对于分配的内存、任何类型的打开句柄等都是有效的。

    与其每次都考虑函数是否可以结束程序,不如一开始就编写这样的函数。一切是否正常都没有关系,但每次都将函数后的“控制”返回给调用者。 exit 唯一可以正常工作的地方是 main,因为它基本上和返回那里做同样的事情。总的来说,首先没有理由不写return

    【讨论】:

      【解决方案3】:

      我认为退出函数更难测试。在测试一个有退出调用的函数时,我很吃力。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-16
        • 2021-04-06
        • 2011-03-10
        • 2011-09-17
        • 1970-01-01
        • 2011-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多