为什么这个C++函数不需要返回?
Why doesn't this C++ function need return?
我看到有人写了这段代码
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 函数要干净得多,或者更好的是,让它返回值并且根本不使用静态函数。
相关文章:
- 为什么模板类中的对象不能返回值
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 为什么output_editor Concept不需要output_e迭代器标记
- C++Brute Force攻击函数不会返回结果
- 在除法中不需要四舍五入
- 与C代码相比,为什么C++代码不需要"#define _POSIX_C_SOURCE 200809L"?
- 我可以使用什么来停止循环而不是"返回 0"?
- 在 C++ 中访问数组负索引处的内存不会返回垃圾
- 将值从另一个数组写入数组,不包括不需要的值 C++
- 返回不需要的值的二叉搜索程序
- 我不明白我的错误需要返回一个指针数组
- 为什么这个C++函数不需要返回?
- 为什么使用Switch语句的功能不需要返回
- C++不需要返回值
- 在c++中执行多个相关错误检查的优雅方式,不需要goto,也不需要提前返回
- 一维和二维数组中不需要的值更改,从 C++ 代码中的函数返回值
- 使用函子的返回类型来声明模板方法的返回类型,不需要decltype
- c++调用约定是否受标准约束,因为在声明fn时不需要定义函数的返回类型
- 如果我不关心返回值,我需要pthread_exit吗