为什么这个C ++函数不需要返回?

时间:2016-05-21 14:12:22

标签: c++

我看到有人写了这段代码

int r, odd_divisors(int a, int b) {
    r = sqrt(b) + 1;
    r -= sqrt(a);
}

AFAIK,编译器会在此代码的末尾自动添加return 0;,但在这种情况下,它会返回r的值。有人可以帮我解释为什么会这样。感谢。

更新: 此功能实际上适用于此Codefights网站:https://codefights.com/challenge/eu4zLJDcv88B2mcCp。您可以查看sir_ementaler的解决方案。

更新2: 感谢大家指出这个功能格式不对。我知道。我在这里问的原因是因为它是我在上一次更新中提到的网站中的赢家解决方案。在我看来,Codefights必须为其编译器添加一些其他功能。

2 个答案:

答案 0 :(得分:2)

您可能从预标准C中知道的“隐式int”规则不适用于C ++。 这是无效的代码。

修复损坏的代码。

答案 1 :(得分:0)

您发布的代码不是合法的C ++,但它非常接近合法。以下 合法:

odd_divisors

这里有两件事。首先,您可以定义一个int并在同一语句中声明一个函数,但是您无法定义该函数。允许这是一个明显的编译器扩展。

其次,未能从值返回函数返回值是未定义的行为。 可以意味着崩溃 - 但它也意味着完全按照您的期望行事。如果你不试图使用函数中的值,很可能(但不确定),没有什么事情会发生。

当然,使public static bool IsBirthDayInRange(DateTime birthday, DateTime start, DateTime end) { DateTime temp = birthday.AddYears(start.Year - birthday.Year); if (temp < start) temp = temp.AddYears(1); return birthday <= end && temp >= start && temp <= end; } 成为一个void函数要更加清晰,或者更好的是,让它返回值而不是使用静态函数。