将所有void函数转换为非空隙函数

Converting all void functions to non-void function

本文关键字:函数 转换 void      更新时间:2023-10-16

我认为,即使函数实际上没有返回任何内容,也最好返回整数。返回的值可用于反映函数内部的各种错误条件。我们始终选择整数返回功能,而不是C 中的" void"功能?

是否有任何价格

您将拥有必须从每个函数返回值的计算开销。但是一个好的优化器可能会删除冗余返回值。

这是坏主意,因为它将使您的代码无法阅读。但这是一个坏主意,出于另一个原因:它创造了不确定的行为逐渐蔓延到您的程序中的另一种可能性。除main外,所有功能都标记为int 必须上的 int on all 控制路径。

为什么不使用异常机制;哪种惯用方式?

如果您有一个设计策略,每个函数都应返回一个代码,以告诉您它是否成功,然后更改void函数以返回该值是有道理的。您最终通过引用传递输出参数,而不是返回值,并且获得看起来不像惯用性C 的代码。但是,如果只有否则什么都不会返回的功能,那只是一个任意的变化,会使人们无休止地混淆。

如果函数无法执行该功能应做的事情,则应抛出异常。

是的,将有一个价格。我们将付出创建代码的代价,这不那么清楚,更容易出错。

首先,返回原始int可怕的想法。您如何区分 int返回类型的函数是实际整数,而 int返回类型是错误代码?

但是,即使您恢复了 int尺寸的 int -like ErrorCode类型,但这仍然是一个坏主意。现在,您手中有很多功能,声称它们可能会导致错误。问题是,可能会有什么错误?从理论上讲,每个呼叫站点都应检查所有可能的错误,如果不处理它们,然后将其传递。

实际上,这将带来两个后果之一。任何人都遵循此操作,每个功能代码都会被错误处理淹没。

或(更有可能)人们只是辞职并忽略返回的错误代码,可能会带有诸如// this cannot fail之类的评论。但是,这给您带来了错误的安全感。编写功能时,您"安全"返回错误代码并假设将处理它。但是,来电者很可能会很高兴地忽略它。

在C 中,如果您想让呼叫者知道存在错误,则应使用构建错误机制:例外。 在没有故意努力的情况下,呼叫者无法忽略这些错误机制部分,允许您编写仅关心错误的代码。