Выполнение следующего кода выполняется до "!!!" когда оптимизатор компилятора оптимизирован:Сумасшедшее поведение при использовании оптимизации компилятора
int test()
{
volatile uint32_t flag = 0; /* volatile doesnt matter */
flag = 3;
if (flag == 0)
{
return 0; // !!!
}
else
{
return 1;
}
}
Компилятор: IAR Studio C компилятор; Платформа: микроконтроллер SAM4C; оптимизация среднего уровня
Конечно, это уже код, в котором исходная проблема была сварена.
Я не могу понять, что компилятор делает здесь ...
С другой стороны, это работает, как ожидалось:
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;
}
Выглядит загадочно, есть ли какие-либо подсказки в asm? – harold