所以,用法大概是這樣...
#include <stdio.h>
#include <setjmp.h>
jmp_buf setjmp_buffer;
int
main( int argc, char* argv[] )
{
if( setjmp( setjmp_buffer ) == 0 )
{
// do something
printf("longjmp!!\n");
longjmp( setjmp_buffer, 1 ); // 用 0 的話, setjmp() 就會收到 0, 那麼可能會無窮回圈
}
else
{
// do something
printf("after longjmp.\n");
}
}
很簡單吧,應該也可以兜出 try ... catch ... finally 的用法.
下面是我大致的想法
int exception_id;
if( ( exception_id = setjmp( setjmp_buffer ) ) == 0 ) // try
{
// do something
longjmp( setjmp_buffer, 1 ); // throw
}
else
{
if( exception_id == 1 ) // catch( 1 )
{
}
if( exception_id == 2 ) // catch( 2 )
{
}
// ....
}
// 之後,就是 finally...
之後再參考書看看吧... ^^
1 則留言:
還是看不大懂setjmp的原理
張貼留言