【发布时间】:2019-07-08 16:48:21
【问题描述】:
我对函数的返回类型有点困惑,特别是什么时候返回什么。如果我们有任意函数,比如说 min(x,y),它应该根据 if 语句返回,我应该在它们的范围之外返回什么,这是函数声明所要求的。我了解到使用“return 0”或“return 1”很常见,但我不明白为什么会这样,以及为什么它不能只返回 if 的任何一个 return 语句。
// compute difference largest - smallest
int diff(x, y)
{
if (x > y)
return x - y;
if (y > x)
return y - x;
if (x == y)
return 0;
return 1;
}
【问题讨论】:
-
一个函数应该返回你想要返回给调用者的值。该值是多少取决于函数的用途。通常用0和1来表示成功和失败,或者失败和成功,或者假和真。通常,函数返回一个根据其参数计算的值。对于
min函数,min可能代表“最小值”,它应该返回其两个参数的最小值。在相等的情况下,min函数通常不会返回 1(除非两个数字恰好为 1)。 -
不应调用返回两个值的绝对差的函数
min。它可以称为AbsoluteDifference或absdiff或类似的名称。在最简单的形式中,如果两个数字相等,这样的函数将返回零。如果你想返回一个相等的数字,你可以称之为ClampedAbsoluteDifference。 -
请注意,在现代 C 中,
int min(x, y)不是正确的声明。您需要参数的类型,例如int min(int x, int y)。 -
@EricPostpischil 但为什么我必须声明两次;如果我希望它返回差异。为什么函数不跳过 return 1,只返回 if 中的任何一个,如果它是真的,然后终止?
-
@Mike 两次声明什么?
return 1;永远不会被执行,因为所有三种可能的情况都已经处理过了。因此您可以删除return 1;。或者最好按照 EricPostpischil 的回答建议编写函数。
标签: c return return-value return-type