Ich habe den folgenden Code: "OK"Optimierungsfehler oder undefiniertes Verhalten?
#include <math.h>
#include <stdio.h>
using u16 = unsigned short int;
using s16 = signed short int;
using s32 = signed int;
s16 Algorithm(s16 sample)
{
s32 absSample = static_cast<s32>(abs(sample));
s32 sampleBits = absSample >> 7;
s32 sampleMasked = absSample & 0x7F;
s16 result = (u16)(sampleMasked << sampleBits) | (u16)(1 << (sampleBits - 2));
if (sample < 0)
{
result = -result;
}
return result;
}
int main()
{
s16 result = Algorithm(-63);
if (result == -63)
{
printf("OK!\n");
return 0;
}
else
{
printf("BUG!?\n");
return 1;
}
}
In x64 Debug druckt es aber in der x64-Version gibt es "BUG !?" aus, gibt es ein Problem mit meinem Code oder macht der Compiler hier etwas falsch? Wie kann ich dieses Problem beheben oder umgehen?
nur sicherstellen, dass, müssen Sie den Hotfix für Update 3 (vorausgesetzt, Sie verwenden MSVC 2015)? – user975989
Ich bin gerade auf Update 2, ist das etwas in Update 3 behoben? – paulm
Ich bin mir nicht sicher, ich dachte nur, dass es relevant sein könnte. – user975989