我为什么不在C中使用exit函数?

时间:2014-11-21 20:08:59

标签: c error-handling exit

我一直在做一些学校项目,我已经将这个功能用于错误输出:

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

谢谢你的时间。

3 个答案:

答案 0 :(得分:2)

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

当我在C中编程时,我的所有函数总是返回int(或typedef int)然后我可以从函数返回错误。然后我的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的返回值。这使您可以选择处理代码中的错误。

答案 1 :(得分:1)

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

不是每次都能想到函数是否可以结束程序,而不是首先编写这样的函数。无论一切是否正常都无关紧要,但每次将函数后的“控制”返回给调用者。 exit唯一可以正常的地方是主要的,因为它基本上会像返回那样做同样的事情。在主要方面,没有理由不首先写return

答案 2 :(得分:0)

我的观点是退出功能更难测试。在测试具有退出调用的函数时,我遇到了很多困难。

相关问题