ここにコードがあります
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が前のスタックにジャンプして戻る理由を知っています。しかし、詳細についてはよくわかりません。「マーク」にはどのような値が格納されているのでしょうか。誰か説明できますか?