3

快速提问.. 是否有一种“正确”的方法可以在输入无效时从 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...)andiostream而不是 or stdio.h

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

谢谢!

4

3 回答 3

11

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

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

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

通常值 0 - 127 会根据作业崩溃和退出代码保留供您使用,其余的供系统使用

于 2012-06-10T23:16:53.790 回答
1

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

Unix非常相似,但根据这个似乎有更多的规范

于 2012-06-10T23:24:07.103 回答
1

或者,您可以调用exit()函数,而不是return. 即在 main 内,retrun exp等价于exit(exp). exit 的参数可用于任何调用 this 的进程,因此程序的成功或失败可以由另一个使用 this 作为子进程的程序来测试。按照惯例,返回值 0 表示一切正常;非零值通常表示异常情况。

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

于 2012-06-11T04:51:47.043 回答