После вызова longjmp() локальные объекты с энергонезависимой квалификацией не должны быть доступны, если их значения могут быть изменены с момента вызова setjmp(). Их значение в этом случае считается неопределенным, а доступ к ним - undefined.
Теперь мой вопрос - почему волатильность работает в этой ситуации? Не изменится ли эта изменчивая переменная, все еще не получившая longjmp? Например, как longjmp будет работать правильно в приведенном ниже примере? Когда код вернется к setjmp после longjmp, не будет ли значение local_var равным 2 вместо 1?
void some_function()
{
volatile int local_var = 1;
setjmp( buf );
local_var = 2;
longjmp( buf, 1 );
}