返回1 vs返回0(用户和程序员)

时间:2016-03-18 17:53:30

标签: c++ return

我在返回1上看过一些以前的帖子并返回0,这就是我的理解:

对于程序的用户(不会看到源代码的人),返回1和返回0之间没有区别。

对于程序员,返回1表示错误,返回0表示正常执行。

我是否理解正确?

嗨,对不起,我并不认为这很重要,但我在main()的上下文中谈到。

3 个答案:

答案 0 :(得分:1)

程序的退出状态可以是,无论给定程序想要它[均值]。

虽然大多数程序都使用:0=success, 1=error,但其他一些程序会执行不同的操作。

POSIX / Unix / Linux的一些例子:

true程序始终以0退出。false程序始终以1退出。因此,[学术上讲] false失败了吗?

cmpdiff程序执行:0=files match, 1=files differ, 2=other [2通常意味着其中一个被比较的文件存在]。< / p>

rsync程序有许多退出代码:0=success, non-zero=error。但是,rsync可能有很多失败的方法。由于rsync适用于实时FS,因此可以重试某些错误。例如,在rsync发生时(代码2324),会删除源文件。这可以重试。同样地,对于一些超时错误。

EXIT VALUES
0      Success

1      Syntax or usage error

2      Protocol incompatibility

3      Errors selecting input/output files, dirs

4      Requested action not supported: an attempt was made  to  manipu‐
       late  64-bit files on a platform that cannot support them; or an
       option was specified that is supported by the client and not  by
       the server.

5      Error starting client-server protocol

6      Daemon unable to append to log-file

10     Error in socket I/O

11     Error in file I/O

12     Error in rsync protocol data stream

13     Errors with program diagnostics

14     Error in IPC code

20     Received SIGUSR1 or SIGINT

21     Some error returned by waitpid()

22     Error allocating core memory buffers

23     Partial transfer due to error

24     Partial transfer due to vanished source files

25     The --max-delete limit stopped deletions

30     Timeout in data send/receive

35     Timeout waiting for daemon connection

答案 1 :(得分:0)

在某些情况下,操作系统会关注程序返回的值。为此,唯一的可移植返回值为if (!PyArg_ParseTuple(args, "sO", &filename, &result)) { return NULL; } PyObject *l = PyLong_FromLong((long)comp); if (!l) { return NULL; } int success = PyList_Append(result, l); Py_DECREF(l); if (! success) { return NULL; } success = PyList_Append(result, complist); if (! success) { return NULL; } EXIT_SUCCESS和0,其中0等于EXIT_FAILURE。命名常量的值来自EXIT_SUCCESS<cstdlib>

答案 2 :(得分:0)

假设您在这里谈论main()函数返回值,它将变为“程序退出状态”(wiki link)。

对于GUI程序,返回值很少用于任何事情,无论是程序员还是程序用户。

另一方面,对于控制台程序和命令行实用程序,返回值通常非常有用,有时甚至是整个目的而只是程序的输出。示例是Unix test实用程序。用户使用它来测试某些条件,例如test -f file.txt以测试 file.txt 是否存在。如果文件存在,它将返回退出代码0(通常表示成功),如果不存在,则返回非零。

当然在这些情况下,程序的用户通常是某人,例如编写shell脚本或命令行“one-liner”,但他们仍然是该程序的用户,并且不会查看程序源代码使用该程序的代码。

关于C和标准:注意C标准本身并没有说明main可以返回什么值,除了提供两个常量EXIT_SUCCESS(我认为这总是0,但没有标准参考方便)和EXIT_FAILURE(然后非零),并为实现留下休息。但是在MSDOS / Windows / Unix / Linux中,你基本上可以提供至少在0-255范围内的退出状态,这取决于OS可能更大的范围,也包括负值,然后使用它们来表示不同的东西。从操作系统的角度来看,0意味着成功只是一个约定或推荐,并没有真正强制执行,并且由父进程正确解释返回值。

相关问题