阅读:1688回复:13
C++的xyz老手问个abc的问题?曾听大牛说过,C++中出错处理时,使用goto语句是一种可以 接受的编程风格。比如一个函数,有很多种出错情况。但是他们的 出错处理却大同小异。这时候使用goto语句就会很方便。 问题是有没有更好的方法? |
|
沙发#
发布于:2004-06-26 09:07
使用异常更好些一吧
|
|
|
板凳#
发布于:2004-06-26 09:25
异常开销可能比较大。
如果出错处理部分基本相同,却又有一些小的差别,怎么办? |
|
地板#
发布于:2004-06-26 09:59
像这样呢?:D
void p = NULL; bool bOK = false; do { // do something p = new int; if(!p) break; //... // break; //... bOK = true; } while(0) //处理 if(p) delete p; if(!bOK) { //... } |
|
地下室#
发布于:2004-06-26 10:09
感觉是后现代的风格!
果然是高手!服了! |
|
5楼#
发布于:2004-06-26 11:51
感觉还是用goto比较习惯。用了这么多年了。
|
|
6楼#
发布于:2004-06-26 15:04
break能确定方向(一定是往下去了),谁知道你的goto是到哪呀? :D
其实还是异常比较好些吧 |
|
7楼#
发布于:2004-06-26 18:33
有道理。
|
|
8楼#
发布于:2004-06-29 10:25
用try catch
try { if ( i== 0) throw(1) } catch(...) { Foo } 即使从try块内调用的函数中throw,catch也会接受到。 |
|
9楼#
发布于:2004-07-22 15:32
如果出错处理部分基本相同,却又有一些小的差别,怎么办? 设个flag部就好了阿? { void* p1 = NULL; void* p2 = NULL; int error = 0; ...// allocate p1 if(p1 != NULL){ error = 1; goto FAILED; } ...// allocate p2 if(p2 != NULL){ error = 2; goto FAILED; } ... FAILED: if(error == 1){ ...} else if(error == 1){ ...} else ... // common error process ... } error 的种类可以学ms 用宏定义先,搞的很标准的样子 还可以直观的了解是什么错误。 如果error种类多的话可以改if else为结构 typedef struct error_process{ int error_code; void (*process_func)(); }_error_process; 然后初始化一下,没对应处理的就设process_func=NULL, 调用一下 for(int i=1;i<num_of_error_type;i++) { *.process_func(); } 胡说了一通 [编辑 - 7/22/04 by caval2000] |
|
|
10楼#
发布于:2004-07-23 10:05
GOTO没什么不好,别拉不出屎,怪马捅不好,嘿嘿......
|
|
|
11楼#
发布于:2004-07-23 17:05
用多了会昏的!
|
|
12楼#
发布于:2004-07-25 15:37
果然好方法。。。
|
|
13楼#
发布于:2004-07-25 15:54
呵呵 为什么不把两种方法结合起来?
设个flag { void* p1 = NULL; void* p2 = NULL; int error = 0; ...// allocate p1 try { if(p1 != NULL){ error = 1; } ...// allocate p2 if(p2 != NULL){ error = 2; } }catch(...) { handle_fun(yourhandle_fun,error) } ....//continue; //出错处理函数 typedef (*error_handle)(int) { //handle error } error_handle phandle; //标准出错处理函数: handle_fun(void phandle(int) ,int error) { phandle(error); } |
|