Почему volatile работает с setjmp / longjmp

После вызова longjmp () к локальным объектам с энергонезависимой памятью нельзя обращаться, если их значения могли измениться с момента вызова setjmp (). Их значение в этом случае считается неопределенным, и доступ к ним является неопределенным поведением.

Теперь мой вопрос: почему volatile работает в этой ситуации? Не изменится ли эта изменчивая переменная по-прежнему с ошибкой longjmp? Например, как долгоjmp будет правильно работать в приведенном ниже примере? Когда код возвращается к setjmp после longjmp, не будет ли значение local_var равно 2 вместо 1?

void some_function()
{
  volatile int local_var = 1;

  setjmp( buf );
  local_var = 2;
  longjmp( buf, 1 );
}
20
задан MetallicPriest 3 November 2011 в 14:51
поделиться