类型无返回,在函数中返回非 void

新手上路,请多包涵

我的 C++ 代码如下所示:

 int f(int i){
    if (i > 0) return 1;
    if (i == 0) return 0;
    if (i < 0) return -1;
}

它正在工作,但我仍然得到:

警告:没有返回,在函数中返回非 void

即使很明显所有情况都包括在内。有没有办法以“正确”的方式处理这个问题?

原文由 user31027 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 736
2 个回答

编译器没有掌握 if 条件涵盖所有可能的条件。因此,它认为执行流程仍然可以通过所有 if s。

因为这些条件中的任何一个都假定其他条件为假,所以您可以这样写:

 int f(int i) {
    if (i > 0) return 1;
    else if (i == 0) return 0;
    else return -1;
}

由于 return 语句最终终止了一个函数,我们可以将其缩短为:

 int f(int i) {
    if (i > 0) return 1;
    if (i == 0) return 0;
    return -1;
}

注意缺少两个 else s。

原文由 cadaniluk 发布,翻译遵循 CC BY-SA 3.0 许可协议

有没有办法以“正确”的方式处理这个问题?

一个简单的解决方法是去掉最后一个 if。由于前两个要么被调用,要么不被调用,如果你得到它,则必须调用第三种情况

int f(int i){
    if (i > 0) return 1;
    if (i == 0) return 0;
    return -1;
}

我们必须这样做的原因是编译器不能保证在每种情况下都会调用您的 if 语句。由于它到达函数的末尾并且它可能没有执行任何 if 语句,它会发出警告。

原文由 NathanOliver 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题