【发布时间】:2009-12-10 16:08:50
【问题描述】:
例如,在 Linux 中,当我使用批处理时,如果错误代码为 0,那很好,但 C++ 中的约定是什么?
当 int(或 bool)等于 1 时,我们说这是真的,但是在 C++ 中这样的函数的返回值是什么?
【问题讨论】:
例如,在 Linux 中,当我使用批处理时,如果错误代码为 0,那很好,但 C++ 中的约定是什么?
当 int(或 bool)等于 1 时,我们说这是真的,但是在 C++ 中这样的函数的返回值是什么?
【问题讨论】:
在 C++ 中,通常使用 boolean return 来表示 true 表示成功,false 表示失败。
使用整数返回值也很常见,其中零表示成功,非零表示失败或任何其他情况(通常负数表示错误,而正数表示其他结果)。
无论您选择哪种方法,重要的是对其进行记录并在整个代码库中保持一致。
【讨论】:
在 C 及其运行时库中,0 表示成功(有时需要轮询 errno)。
在 C++ 世界里更加丰富多彩:
不要混合使用 bool 使用约定和“0”,结果只是简单的混淆代码(参见示例)。如果您碰巧需要多个值,请根据情况使用枚举、附加返回参数或异常。
引入了 bool 和 '0' 代码混淆:
// sorry for abuse of "C" for educational purposes
bool isSame(s1,s2) { return s1==s2; }
int isSame2(s1, s2) { return strcmp(s1.cstr(), s2.cstr()); }
if (isSame(..) && !isSame2(..)) ...
【讨论】:
C++ 函数或方法可以返回 bool 值,例如 true 或 false。程序(即main 函数)必须返回一个int 值,例如0 以报告“成功”。
【讨论】:
main 返回的影响。但是,它们不一定是相同的值。尝试返回 1,024,你可能会在 shell 中得到零!
main 的返回值是如何“从外部”映射的。唯一的保证是返回EXIT_SUCCESS或0(可能是同一件事)会报告成功完成,返回EXIT_FAILURE会报告错误;任何其他值都是实现定义的。也就是说,在 Unix 和 Windows 上,翻译都是直接的。
返回整数的标准 C 函数通常返回大于或等于 0 表示成功,返回 -1 表示失败。当返回 -1 时,errno 通常设置为提供更具体的错误。零表示一般成功,其中大于零的数字被假定为成功并提供更多详细信息。
考虑类似recvfrom()。返回值 -1 表示完全失败,errno 设置为详细代码。返回值为零意味着套接字以有序的方式关闭,并且额外的调用不会返回数据。返回值大于零表示接收到数据,接收到的字节数就是返回的内容。
【讨论】:
我理解您要问两个问题:
基本答案如下。
通常程序 (main()) 返回 0 表示成功,其他值 - 错误 - 表示失败
如果一个函数可以成功或失败,它通常被键入为 bool 并返回 true 或 false。
如果一个函数可以返回多个值,它通常会返回 int 或 enum 值。
尝试为那些异常的情况抛出异常。
【讨论】: