VS2012 を使用しswitch
て、数年間動作していた a がリリース ビルドでは壊れているように見えますが、デバッグ ビルドでは正しく (または少なくとも以前と同じように) 動作することに気付きました。コードに問題はまったく見られないので、ブロックreturn
内からステートメントを使用することの正確さについてのフィードバックをいただければ幸いです。switch
次のコードは正常にコンパイルされますが、Win7 32 ビットのリリース ビルドでは間違った出力が得られます...
#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