将所有void函数转换为非空隙函数
Converting all void functions to non-void function
我认为,即使函数实际上没有返回任何内容,也最好返回整数。返回的值可用于反映函数内部的各种错误条件。我们始终选择整数返回功能,而不是C 中的" void"功能?
您将拥有必须从每个函数返回值的计算开销。但是一个好的优化器可能会删除冗余返回值。
这是坏主意,因为它将使您的代码无法阅读。但这是一个坏主意,出于另一个原因:它创造了不确定的行为逐渐蔓延到您的程序中的另一种可能性。除main
外,所有功能都标记为int
必须上的 int
on all 控制路径。
为什么不使用异常机制;哪种惯用方式?
如果您有一个设计策略,每个函数都应返回一个代码,以告诉您它是否成功,然后更改void
函数以返回该值是有道理的。您最终通过引用传递输出参数,而不是返回值,并且获得看起来不像惯用性C 的代码。但是,如果只有否则什么都不会返回的功能,那只是一个任意的变化,会使人们无休止地混淆。
如果函数无法执行该功能应做的事情,则应抛出异常。
是的,将有一个价格。我们将付出创建代码的代价,这不那么清楚,更容易出错。
首先,返回原始int
是可怕的想法。您如何区分 int
返回类型的函数是实际整数,而 int
返回类型是错误代码?
但是,即使您恢复了 int
尺寸的 int
-like ErrorCode
类型,但这仍然是一个坏主意。现在,您手中有很多功能,声称它们可能会导致错误。问题是,可能会有什么错误?从理论上讲,每个呼叫站点都应检查所有可能的错误,如果不处理它们,然后将其传递。
实际上,这将带来两个后果之一。任何人都遵循此操作,每个功能代码都会被错误处理淹没。
或(更有可能)人们只是辞职并忽略返回的错误代码,可能会带有诸如// this cannot fail
之类的评论。但是,这给您带来了错误的安全感。编写功能时,您"安全"返回错误代码并假设将处理它。但是,来电者很可能会很高兴地忽略它。
在C 中,如果您想让呼叫者知道存在错误,则应使用构建错误机制:例外。 在没有故意努力的情况下,呼叫者无法忽略这些错误机制部分,允许您编写仅关心错误的代码。
- 如何使用Rcpp将R函数转换为C++函数
- C++函数转换为 C# 函数
- 将 C 函数转换为 C++ 以检查数字是否有效
- C++:从重载函数转换为 std::function
- 将 C 函数转换为C++语言
- C++隐式构造函数转换,后跟类型向上转换
- 将 lambda 函数转换为具有混合 lambda 引入器和参数列表的函子结构
- 通过 Boost Python 将 Python 函数转换为 C++,用作回调
- 如何将 MATLAB 图像处理库内置函数转换为 MATLAB 编码器代码生成不支持的 C++?
- 如何将函数转换为 lambda 函数
- 自定义函数转换错误?
- 将 C# 哈希函数转换为C++
- 将 lambda 函数转换为另一个编译单元中的普通函数会缩短编译时间吗?
- 加快 R 性能或将 R 函数转换为C++函数
- 将成员函数转换为指向成员函数的指针
- 将MATLAB炒作函数转换为C
- Rcpp - 用二进制函数转换数字向量?
- C lambda函数转换误差
- 此语法中的构造函数转换错误
- 将函数转换为find_if lambda