为什么要使用int函数而不是void

Why use int functions over void?

本文关键字:void 函数 int 为什么      更新时间:2023-10-16

我正在查看一些示例函数和方法(我目前在C++类中),我注意到有一些函数不是无效的,而是类似的

int myFunction() {
// ...;
return 0;
}

省略号显然是另一种说法。为什么他们归零?每次运行函数时返回一个特定值有什么意义?

我知道main()必须是int(至少根据标准),因为它与退出代码相关(或是?),因此可以与操作系统一起工作。然而,我想不出一个非主函数会这样做的原因。

与简单地制作一个void函数相比,有人可能想要这样做的特殊原因吗?

如果他们真的这么做了,不管函数做什么都返回0,那么这完全没有意义,他们不应该这么做。

在C世界中,int返回类型是一种约定,因此您可以返回自己的"错误代码",但这不仅不是C++的惯用语言,而且如果您的程序员总是返回0,那么这完全是愚蠢的。

具体而言:

我知道main()必须是int(至少根据标准),因为它与退出代码相关(或是?),因此可以与操作系统一起工作。然而,我想不出一个非主函数会这样做的原因。

我同意。

int函数有一个常见的约定,返回0表示成功,返回一些非零错误代码表示失败。

如果孤立地查看,总是返回0的int函数也可能是void函数。但根据上下文的不同,可能有充分的理由使它与返回有意义结果的其他函数兼容。这可能意味着,如果稍后修改函数以检测错误,则不必更改函数的返回类型——或者,如果将其用作回调或模板参数,则可能需要使其声明与其他int返回函数兼容。

我建议检查库或程序中的其他类似函数。

这是一种惯例,尤其是在C程序员中,如果函数没有遇到任何错误,则返回0,如果出现错误则返回非零值。

这已经延续到C++中,尽管由于异常处理和其他更面向对象的友好错误处理方式,它不太常见,也不太符合惯例,但它确实经常出现。

还有一个其他答案没有涉及的问题。省略号中可能有另一个return语句:

int myFunction() {
// ...;
if (error)
return code;
// ...;
return 0;
}

在这种情况下,myFunction不是总是返回0,而是仅在没有发生错误时返回。这样的return语句通常比结构更结构化但更详细的if/else代码块更受欢迎,并且可能经常被伪装在冗长、草率的代码中。

像这样的大多数时间函数应该返回void

另一种可能性是,该函数是具有相同签名的一系列闭相关函数之一。返回的int值可以表示状态,例如返回成功的0,并且其中一些函数总是成功的。更改签名可能会破坏一致性,或者由于签名不匹配而使函数无法作为函数对象使用。

与简单地生成一个void函数相比,有人想要这样做的特殊原因吗?

为什么你妈妈在把烤肉放进烤箱之前把它的末端切掉?答:因为她祖母就是这么做的。然而,她的祖母这么做的原因很简单:她的烤盘不够大,放不下全尺寸的烤肉。

我使用的模拟工具在其最早的版本中要求模拟引擎调用的所有函数都必须返回成功状态:0=成功,非零=失败。永远不会失败的函数被编码为始终返回零。模拟引擎已经能够适应在很长很长一段时间内返回空白的功能。返回一个整数成功代码是上个千年所要求的行为,但这并没有阻止狂热的程序员在编写函数时一直将零返回到当前。

在某些编程语言中,您可以找到过程函数。在C、C++和类似的语言中,你不会。相反,你只有函数。

在实践中,过程是执行特定任务的程序的一部分。另一方面,函数就像一个过程,但函数可以返回一个答案。

由于C++只有函数,您将如何创建过程?这时,您可以创建一个void函数,或者返回任何您喜欢的值来显示任务已完成。它不一定是0。如果你愿意,你甚至可以返回一个字符。

例如,cout语句。它只是输出一些东西,但不返回任何东西。这就像一个过程。

现在考虑像tan(x)这样的数学函数。这意味着使用x返回对调用它的程序的回答。在这种情况下,不能只返回任何内容。您必须返回TAN操作的值。

因此,如果您需要编写自己的函数,则必须根据所做的操作返回一个值。如果没有任何要返回的内容,您可以只编写一个void函数或返回一个类似0或其他任何值的伪值。

然而,在实践中,通常会发现函数返回0表示"一切顺利",但这不一定是一条规则。

下面是我要写的一个函数的例子,它返回一个值:

float Area ( int radius) 
{
float Answer = 3.14159 * radius * radius;
return Answer;
}

这将半径作为一个参数,并返回计算出的答案(面积)。在这种情况下,不能只说返回0。

我希望这是清楚的。