看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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