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

Why doesn't this C++ function need return?

本文关键字:不需要 返回 函数 C++ 为什么      更新时间:2023-10-16

我看到有人写了这段代码

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必须为其编译器添加一些其他功能。

您可能

从试行标准 C 中知道的"隐式 int"规则不适用于C++。这是无效代码。

修复损坏的代码。

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

// Example program
#include <iostream>
#include <string>
#include <math.h>
int r, odd_divisors(int a, int b);
int odd_divisors(int a, int b) {
    r = sqrt(b) + 1;
    r -= sqrt(a);
    return 0;
}
int main()
{
    odd_divisors(16,25);
    std::cout << "Hello, " << r;
}

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

其次,未能从值返回函数返回值是未定义的行为。 这可能意味着崩溃 - 但它也可能意味着完全按照您的期望去做。 如果您不尝试使用函数中的值,则很可能(但不确定)不会发生任何事情。

当然,odd_divisors成为一个 void 函数要干净得多,或者更好的是,让它返回值并且根本不使用静态函数。