递归函数:为什么一些比较者不喜欢在条件下返回

时间:2015-06-29 11:59:15

标签: c recursion return

一个非常普遍的问题。我在C上工作,有时当我使用递归算法时,有时候我只想在“if”中设置“返回值”。而且我没有'外部'返回,一些编译器不喜欢它,就像在CodeBlocks环境中它将其定义为编译错误,例如在microsoft visual studio中它没有。而且我不想弄乱我的代码,所以生病有外部回报,因为在复杂的算法中它可能很难,但我知道在我的情况下,它适用于我需要的所有exmaples。

所以,正如我在教育程序中所理解的那样,对于大多数情况来说它不会是一个问题(如果我错了,请纠正我 - 我的意思是,如果我知道我在算法中做了什么,以及它的输入是什么)这不是一个问题,但一般来说,据我所知,如果我写一个没有'extern'返回的代码,我可能会有问题,如果在某些情况下,我没有关于它们,它不会返回任何值或将返回垃圾,我是对的吗?

有人能给我另外的信息吗?

1 个答案:

答案 0 :(得分:0)

我认为你的意思是这样的:

int foo() {
  ...
  if (...) {
     return ...;
  }
  ...
  // should never reach here so no return
}
  

无法从具有非void返回类型的函数返回值会导致未定义的行为,但不是语义错误。

未定义的行为意味着任何事情都可能发生:程序可能崩溃,函数可能(似乎)实际返回一些东西。

处理此问题的一种方法可能是:

int foo() {
  ...
  if (...) {
     return ...;
  }
  ...
  assert(0, "should never reach here");
  return 0;
}

另见Why “not all control paths return a value” is warning and not an error?