Die Ausführung des folgenden Codes läuft auf "!!!" Wenn der Compiler optimiert ist:Verrücktes Verhalten bei Verwendung der Compiler-Optimierung
int test()
{
volatile uint32_t flag = 0; /* volatile doesnt matter */
flag = 3;
if (flag == 0)
{
return 0; // !!!
}
else
{
return 1;
}
}
Compiler: IAR Studio C-Compiler; Plattform: SAM4C Mikrocontroller; Mittlere Ebene Optimierung
Natürlich ist dies bereits ein Code, wo das ursprüngliche Problem eingekocht wurde.
Ich kann nicht verstehen, was der Compiler hier ...
Auf der anderen Seite tut, funktioniert das wie erwartet:
int test()
{
volatile uint32_t flag = 0; /* volatile doesnt matter */
int result = 0;
flag = 3;
if (flag == 0)
{
result = 0;
}
else
{
result = 1; // !!!
}
return result;
}
Sieht geheimnisvoll aus, gibt es Hinweise in der ASM? – harold