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/cn.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