C_and_CPP 板


LINE

開發平台(Platform): (Ex: Win10, Linux, ...) visual studio 2017 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) C語言 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 如何在副函數的副函數中,跳回main function 餵入的資料(Input):預期的正確結果(Expected Output):錯誤結果(Wrong Output):補充說明(Supplement): 因為在做的程式會有很多副程式, 副程式裡面也有副程式, 而使用者的input有可能會有錯誤, 想要達成的目的是,如果在副程式中發現有誤時,print出錯誤資訊並跳回main 不再繼續執行下去 我知道可以return; 但如果是 main()->A(),這樣在A裡寫return;會是回到main沒錯 但如果是main()->A()->B(),這樣在B裡寫return;會是回到A(),而我想回到main 想問有甚麼方法,謝謝 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.106.189 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1593351951.A.FFF.html
1F:推 chuegou: 完全不能經過A嗎 那只能去stack裡面找返回位址 06/28 22:00
2F:→ w0005151: 同樣原因的錯誤建議集中處理, 你應該重新思考函數怎麼切 06/28 22:15
3F:→ Lipraxde: 直接 exit 不好嗎? 06/28 22:17
4F:推 LPH66: 同意二樓, 你應該思考函數的功能分類法 06/28 22:57
5F:→ LPH66: 什麼函數負責什麼功能該回報什麼 06/28 22:58
6F:→ LPH66: 由於你提到了「使用者的 input 有可能會有錯誤」 06/28 22:59
7F:→ LPH66: 你應該思考這個「檢查錯誤」的功能該由誰負責由誰叫起 06/28 22:59
8F:推 Dracarys: longjmp? 06/28 23:08
9F:→ hsnuyi: 丟exception 06/28 23:15
10F:→ james732: setjump與longjump應該可以做到,但可能不是好的做法 06/29 00:15
11F:推 firejox: 雖然setjump longjump 是允許你這樣做,實務上不建議你 06/29 03:51
12F:→ firejox: 用它們 06/29 03:51
13F:推 CoNsTaR: option, result 06/29 04:37
14F:推 Gway: 用global function pointer把main address儲存起來 然後在su 06/29 04:50
15F:→ Gway: b-fun執行error check時 若有需要跳回main 則直接調用此funt 06/29 04:50
16F:→ Gway: ion pointer? 06/29 04:50
17F:→ petercoin: B() return error code回A A再判斷error code也是一種 06/29 09:13
18F:→ petercoin: 作法吧 06/29 09:14
19F:→ Killercat: 你是想問 如何在C底下達成類似exception的效果嗎? 06/29 13:09
20F:→ Killercat: 如果是的話 標準做法就是setjmp跟longjmp 06/29 13:09
21F:→ Killercat: C天生就沒辦法像go傳回err 不是所有func都有空間給你塞 06/29 13:10
22F:→ Killercat: err code,硬要寫成這樣(如一堆HRESULT開頭的W32API)其 06/29 13:11
23F:→ Killercat: 實也滿痛苦的,生活沒必要這樣悲慘的過(誒) 06/29 13:11
24F:→ Killercat: 另用Gway你提到的作法基本上跟setjmp/longjmp沒兩樣啊 06/29 13:12
25F:→ Killercat: 而且你這樣還會有堆疊的問題 XD 06/29 13:12
26F:→ petercoin: 其實他如果是只跑在Windows系統上,SetLastError跟 06/29 19:42
27F:→ petercoin: GetLastError也可以用啊 06/29 19:42
28F:→ petercoin: function回傳bool判斷有沒有成功,失敗就撈last error 06/29 19:42
29F:→ petercoin: code就好 06/29 19:42
30F:推 kingofsdtw: 全域變數,sleep ,and kill 06/29 20:01
31F:→ kingofsdtw: 不過是同一隻程式嗎? 06/29 20:02
32F:→ loveme00835: 先釐清你的責任吧 06/30 00:27
33F:→ Golven: 用goto? (誤) 06/30 18:54
34F:推 hongsiangfu: reset? 07/01 00:00
35F:→ sunneo: 做一隻interpreter 把全部function存到function pointer 07/01 01:10
36F:→ sunneo: 這樣就可以用間接的方式setjmp/longjmp (誤 07/01 01:10
37F:→ Killercat: setjmp/longjmp應該有靠AR處理stack問題 會放掉stack 07/01 20:31
38F:→ Killercat: 其他所有的辦法應該都會碰到堆疊殘留的問題... 07/01 20:31
39F:→ Killercat: 這個我沒有非常確定 有高手的話請指正一下.. orz 07/01 20:32
40F:推 stupid0319: call A()之前呼叫 pushad ,回到 main 呼叫 popad 07/04 21:40







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP