кусок кода здесь
jmp_buf mark;
int Sub_Func()
{
int be_modify, jmpret;
be_modify = 0;
jmpret = setjmp( mark );
if( jmpret == 0 )
{
// sth else here
}
else
{
// error handle
switch (jmpret)
{
case 1:
printf( "Error 1\n");
break;
case 2:
printf( "Error 2\n");
break;
case 3:
printf( "Error 3\n");
break;
default :
printf( "Unknown Error");
break;
}
printf("after switch\n");
}
return jmpret;
}
void main( void )
{
Sub_Func();
// the longjmp after setjmp
longjmp(mark, 1);
}
результат:
Ошибка 1
после переключения
Ошибка сегментации
Я знаю причину, по которой longjmp может вернуться к предыдущему стеку. но я не уверен в деталях, и какое значение было сохранено в «метке», кто-нибудь может это объяснить?
while(1)
, а функция, которая возвращает X раз, возможна с использованием встроенного asm и либо вспомогательной функции, такой какlongjmp
, либо, альтернативно, что-то вроде прерывания таймера. В этом нет ничего особенного. - person mensi   schedule 22.06.2012