После вызова 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 );
}