Используя VS2012, я заметил, что switch
, работающий уже несколько лет, кажется, сломан в сборках Release, но работает корректно (или, по крайней мере, так, как было) в сборке Debug. Я не вижу ничего плохого в коде, поэтому я бы по достоинству оценил правильность использования инструкций return
из блока switch
.
Следующий код компилируется нормально, но дает неправильный вывод в сборке Release на 32-битном Win7...
#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