作者septemhill (冰淇淋乾杯)
看板C_and_CPP
標題[問題] setjmp
時間Fri Aug 19 09:00:43 2011
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux, GCC-4.5-x
問題(Question):
想請教各位一個關於setjmp的programming model
一般寫法大概會像下面:
jmp_buf mark;
int main()
{
int a = 0;
if (setjmp(mark) != 0) {
do_recover
.....
.....
}
a = rand() % 512;
foo(a);
.......
.......
}
void foo(int value)
{
if (value <= 100) {
longjmp(mark, -1);
}
}
大概的model會像這樣,可是目前我希望在main第一次進來的時候也會執行setjmp
請問這樣要怎麼寫呢?
因為按照上面的寫法,main剛進來基本上是不會執行該段程式區間
還是說我只能在該段程式上面自己加一個longjmp(mark, -1)這樣子?
不知道是否還有其他的programming的方式,還請各位先進指點 謝謝
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.105.242
→ septemhill:好像不能在前面加longjmp,因為還沒setjmp 08/19 09:02
→ septemhill:所以不知道有沒有解決的方式 08/19 09:03
→ septemhill:另外我想到的是把裡面的section在複製一份到外面來 08/19 09:04
→ septemhill:可是這樣的作法不是很漂亮,所以想請問有沒有其他方式 08/19 09:04
推 godman362:如果直接寫 if (setjmp(mark) != 0); 有達到你的需求嗎 08/19 09:17
→ godman362:這樣的作法就變成單純的goto到特定label 08/19 09:18
推 purpose:在 foo 內改成 if (value <= 100) return 99; 大於100時 08/19 10:30
→ purpose:則 foo 會 return 101; 然後 main 改成 do{..} while(foo 08/19 10:31
推 littleshan:原po的程式流程頗為奇異,我認為你應該不需要用setjmp 08/19 10:38
→ septemhill:小弟目前將實際的狀況另外寫了一篇,還請各位指點一下 08/19 10:57