#include <iostream>
int maxComDiv(int mayor, int menor)
{
int resto = mayor % menor;
if (resto > 0) maxComDiv(menor, resto);
else return menor;
}
int main()
{
std::cout << "max comon divisor: " << maxComDiv(3654, 1365) << std::endl;
}
使用visual studio 2015社区更新2 - &gt;在发布模式下失败。那么在调试模式下。 使用mingw64 - &gt;两种模式都很好。
答案 0 :(得分:2)
程序的行为是 undefined ,因为return
的{{1}}值不是在所有控制路径上定义。
我认为你打算写macComDiv
(在C ++中没有隐式返回值)。
这说明了调试和发布版本之间的差异。
答案 1 :(得分:1)
你应该阅读警告信息,你会得到的是gcc:
prog.cc: In function 'int maxComDiv(int, int)':
prog.cc:11:1: warning: control reaches end of non-void function [-Wreturn-type]
}
表示缺少return语句:
if (resto > 0)
return maxComDiv(menor, resto);
^^^^^^ ~~~~~~~~ !!
这会导致未定义的行为
答案 2 :(得分:0)
问题在于,当您启用发布模式时,C ++编译器会尝试优化您的代码,以使其尽可能快地运行。
此外,它无法理解if(resto>0)
将调用递归方法,最终将返回false。
由于它发现方法中并非所有代码路径都返回一个值(if(resto>0)
没有返回值),因此它会给您错误。