[問題] setjmp

看板C_and_CPP (C/C++)作者 (冰淇淋乾杯)時間14年前 (2011/08/19 09:00), 編輯推噓3(307)
留言10則, 4人參與, 最新討論串1/1
開發平台(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

08/19 09:02, , 1F
好像不能在前面加longjmp,因為還沒setjmp
08/19 09:02, 1F

08/19 09:03, , 2F
所以不知道有沒有解決的方式
08/19 09:03, 2F

08/19 09:04, , 3F
另外我想到的是把裡面的section在複製一份到外面來
08/19 09:04, 3F

08/19 09:04, , 4F
可是這樣的作法不是很漂亮,所以想請問有沒有其他方式
08/19 09:04, 4F

08/19 09:17, , 5F
如果直接寫 if (setjmp(mark) != 0); 有達到你的需求嗎
08/19 09:17, 5F

08/19 09:18, , 6F
這樣的作法就變成單純的goto到特定label
08/19 09:18, 6F

08/19 10:30, , 7F
在 foo 內改成 if (value <= 100) return 99; 大於100時
08/19 10:30, 7F

08/19 10:31, , 8F
則 foo 會 return 101; 然後 main 改成 do{..} while(foo
08/19 10:31, 8F

08/19 10:38, , 9F
原po的程式流程頗為奇異,我認為你應該不需要用setjmp
08/19 10:38, 9F

08/19 10:57, , 10F
小弟目前將實際的狀況另外寫了一篇,還請各位指點一下
08/19 10:57, 10F
文章代碼(AID): #1EJRMzqD (C_and_CPP)
文章代碼(AID): #1EJRMzqD (C_and_CPP)