在错误的输入/行为上退出C / C ++程序的“正确”方法

时间:2012-06-10 23:16:08

标签: c++ c exit

快速问题..是否有一种“正确”的方式从无效输入的C / C ++程序终止?到目前为止,我在C / C ++的职业生涯中涉及到这样的事情:

// C
#include <stdio.h>
int main(int argc, char **argv)
{
    if (argc != 3) {
        fprintf(stderr, "Error: Usage: %s [some param] [some param]\n", argv[0]);
        return 1;
    }

    /* rest of program */

    return 0;
}

在C ++中,它可以是cerr而不是fprintf(srderr...)而不是iostreamstdio.h

这是一个好的/可接受的方式,还是有一个我不知道的标准?

谢谢!

3 个答案:

答案 0 :(得分:11)

基本约定是返回非零值以指示退出时的某些错误情况。返回值用于表示正常的程序终止。

没有什么可以阻止您提供非零值列表并将它们与特定错误条件相关联,以便可以根据退出值识别特定错误。

例如,如果shell程序正在运行您的程序,则可以通过检查退出值来采取适当的操作。 stderr 的错误消息对我们很有用,但退出值可以以编程方式使用,并提供额外的灵活性。

通常根据Job crashes and exit codes

重新分配值0到127供您使用,其余部分用于系统

答案 1 :(得分:1)

在DOS .bat文件的世界中,成功执行的程序返回0的约定,然后由批处理文件中的%ERRORLEVEL%值检查。非零值表示出现了问题,返回的确切值实际上取决于程序员,应记录在某处。 More here

Unix非常相似,但似乎根据this

有更多的说明

答案 2 :(得分:1)

或者,您可以调用exit()函数,而不是return。这是在主要内部,retrun exp相当于exit(exp)。退出的参数可用于任何称为此的进程,因此程序的成功或失败可由另一个使用此进程作为子进程的程序进行测试。通常,返回值0表示一切都很好;非零值通常表示异常情况。

exit的优点是可以从其他函数调用它。