c - 如何修复“错误:控制到达非无效函数的结尾”?
问题描述
int climbStairs(int n ){
if(n==1){
return 1;
}
if (n>=2){
return (2+ climbStairs(n-2)+ climbStairs(n-1));
}
}
如何修复编译器错误?
解决方案
你的编译器没有你聪明。您可能很清楚,函数永远不会以n
小于 1 的方式调用,但编译器不会。我个人认为它被称为n
典型0
输入。
因此,它认为程序控制可以在没有显式返回的情况下到达函数右括号,如果你使用函数返回值}
,这正式是未定义的行为,重复一遍,我认为你这样做。
您收到此警告,编译器向您发出的问题提升为错误,因此编译停止。
一些修复:
用更强的 阻塞递归
if (n <= 1){
。}
在右大括号之前使用assert(false)
或类似的运行时断言。关闭将该警告提升为错误,但仍要处理该警告。
来自@JonathanLeffler 的一些建议
不要关闭 -Werror - 它太有价值了。处理警告。断言(n >= 0);在顶部; 如果 (n <= 1) { 返回 1; } 也是如此。断言在调试版本中触发;即使未启用断言,错误的参数值也可以合理安全地处理。
推荐阅读
- java - 使用策略或附加类?
- wordpress - 在 Slider Revolution、Wordpress 中获取产品标签
- url-rewriting - 如何在 Xquery 的自定义重写器代码中包含 Marklogic rest-api?
- function - Go 函数中的函数参数
- javascript - 无法使用私有 IP 从 Cloud Functions 连接到 Cloud SQL SQL Server
- android - Espresso 测试随机失败,可能是时间问题
- angular - 在 Storybook (Angular) 上捕获 control.setValue 动作
- python - 在 ipywidgets 上更改 jupyter 中的指针光标
- python - 如何使用 Python 在 Selenium 中基于某些文本的存在单击按钮?
- go - 如何防止`go build`更新最新版本的模块