C++ 为什么在“中生成可执行文件”;“释放”;模式会产生坏结果吗? #包括 int maxComDiv(int MAYER,int menor) { int resto=市长%menor; 如果(resto>0)maxComDiv(menor,resto); 否则返回menor; } int main() { std::cout
程序的行为未定义,因为未在所有控制路径上定义C++ 为什么在“中生成可执行文件”;“释放”;模式会产生坏结果吗? #包括 int maxComDiv(int MAYER,int menor) { int resto=市长%menor; 如果(resto>0)maxComDiv(menor,resto); 否则返回menor; } int main() { std::cout,c++,visual-studio,C++,Visual Studio,程序的行为未定义,因为未在所有控制路径上定义macComDiv的返回值 我想你是想写如果(resto>0)返回maxComDiv(menor,resto); (C++中没有隐式返回值)。 这就解释了调试版本和发布版本之间的差异。由于未在所有控制路径上定义macComDiv的返回值,因此程序的行为未定义 我想你是想写如果(resto>0)返回maxComDiv(menor,resto); (C++中没有隐式返回值)。 这就解释了调试版本和发布版本之间的差异。您应该阅读警告消息,否则您将得到: #i
macComDiv
的返回值
我想你是想写如果(resto>0)返回maxComDiv(menor,resto);
(C++中没有隐式返回值)。
这就解释了调试版本和发布版本之间的差异。由于未在所有控制路径上定义macComDiv
的返回值,因此程序的行为未定义
我想你是想写如果(resto>0)返回maxComDiv(menor,resto);
(C++中没有隐式返回值)。
这就解释了调试版本和发布版本之间的差异。您应该阅读警告消息,否则您将得到:
#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;
}
这表示缺少返回语句:
prog.cc: In function 'int maxComDiv(int, int)':
prog.cc:11:1: warning: control reaches end of non-void function [-Wreturn-type]
}
这会导致未定义的行为您应该阅读警告消息,否则您将得到:
#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;
}
这表示缺少返回语句:
prog.cc: In function 'int maxComDiv(int, int)':
prog.cc:11:1: warning: control reaches end of non-void function [-Wreturn-type]
}
<>这导致了未定义的行为问题是,当你启用发布模式时,C++编译器试图优化你的代码,使它运行得尽可能快。
此外,它无法理解if(resto>0)
将调用一个递归方法,并最终返回false
<>因为它发现在你的方法中不是所有的代码路径返回一个值(<代码>(Resto > 0)< /C>不返回一个值),它给了你错误。< /P> < P>问题是,当你启用发布模式时,C++编译器试图优化你的代码,使它运行得尽可能快。
此外,它无法理解if(resto>0)
将调用一个递归方法,并最终返回false
因为它看到并不是方法中的所有代码路径都返回值(if(resto>0)
不返回值)如果条件resto>0
为真,函数返回什么?@JimmyB bad results似乎表明程序给出了一个结果,这意味着编译成功,那么我的问题是:编译成功后,不同的警告级别会导致不同的输出代码吗?“It失败”不是一个可接受的问题描述。请告诉我们“失败”是什么意思"。在每种情况下,可执行文件的输出是什么?如果我的表达不正确,我表示歉意。我的英语说得不好。当我说可执行文件失败时,意味着没有产生正确的结果。在这种情况下,正确的结果是21。vs2015发布模式:结果是随机的。如果条件resto>0
为真,那么会发生什么什么是函数返回?@JimmyB bad results似乎表明程序给出了一个结果,这意味着编译成功,然后我的问题来了:编译成功后,不同的警告级别会导致不同的输出代码吗?“它失败”不是一个可接受的问题描述。告诉我们“失败”是什么意思。在每种情况下,可执行文件的输出是什么?如果我的表达不正确,我表示歉意。我的英语说得不好。当我说可执行文件失败时,意味着不能产生正确的结果。在这种情况下,正确的结果是21。vs2015发布模式:结果是随机的。我要补充:当程序运行时,首先要检查的是什么调试中正常但发布中不正常是未定义的行为
我想补充:当程序在调试中正常运行但发布中不正常时,首先要检查的是未定义的行为
“最终将返回false”?!因为它将在方法调用中继续使用剩余部分,所以最终if(resto>0)
将返回false,因为resto将为0。好的,您的意思是比较将产生false
,而不是递归方法。“最终将返回false”?!因为它将在方法调用中继续使用余数,所以最终if(resto>0)
将返回false,因为resto将为0。好的,您的意思是比较将产生false
,而不是递归方法。