使用 VS2012,我注意到switch
已经工作了几年的 a 现在似乎在 Release 版本中被破坏了,但在 Debug 版本中可以正常工作(或至少像以前一样)。我看不出代码有什么问题,所以希望能得到一些关于在块return
内使用语句的正确性的反馈。switch
以下代码编译正常,但在 Win7 32 位的 Release 版本中给出了错误的输出...
#include <stdio.h>
#include <tchar.h>
class CSomeClass
{
public:
float GetFloat(int nInt)
{
printf("GetFloat() - entered\n");
switch (nInt)
{
case 1 :
printf("GetFloat() - case 1 entered\n");
return 0.5F;
case 0 :
printf("GetFloat() - case 0 entered\n");
return 1.0F;
case 2 :
printf("GetFloat() - case 2 entered\n");
return 2.0F;
case 3 :
printf("GetFloat() - case 3 entered\n");
return 3.0F;
case 4 :
printf("GetFloat() - case 4 entered\n");
return 4.0F;
}
printf("GetFloat() - exit\n");
return 1.0F;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
CSomeClass pClass;
float fValue = pClass.GetFloat(3);
printf("fValue = %f\n", fValue);
return 0;
}
如果你可以重复这个问题,并且有一个 MS Connect 登录,也许你也可以在这里投票?
实际结果
发布版本给出以下不正确的结果:
GetFloat() - entered
GetFloat() - case 3 entered
fValue = 0.000000
预期成绩
调试构建给出以下正确结果:
GetFloat() - entered
GetFloat() - case 3 entered
fValue = 3.000000