比这篇新的文章: 千字文有没有重复字?
比这篇旧的文章: enable bash completion in interactive shells

异常和error-code的比较

语言: C++, 标签: 无  2008/06/19发布 1年前更新
作者: 翁翁, 点击805次, 评论(0), 收藏者(0), , 打分:

背景
主题: 字体:
01 // 从一些大大们的BLOG上摘抄的部分异常和error-code比较的代码
02 void func1_ex()
03 {
04     try {
05         SomeClass a, b(2), c(3), d(4), e(5), f(6);
06
07         a = (b+c)*(d-e)/f;
08     } catch (exception& e) {
09         // error handling here
10     }
11 }
12
13 void func1_ec()
14 {
15     SomeClass a, b(2), c(3), d(4), e(5), f(6);
16     SomeClass temp = b + c;
17     if (temp.IsValid()) {
18         a = temp;
19         temp = d - e;
20         if (temp.IsValid()) {
21             a = a * temp;
22             if (a.IsValid()) {
23                 if (f.CanBeDivide()) {
24                     a = a / f;
25                 } else {
26                     // error occured.
27                 }
28             } else {
29                 // error occured.
30             }
31         } else {
32             // error occured.
33         }
34     } else {
35         // error occured.
36     }
37 }
38
39 // use exception
40 void func2_ex()
41 {
42     try {
43         op1();
44         op2();
45         // ...
46         opN();
47     } catch (...) {
48         // log
49         // cleanup
50         throw;
51     }
52 }
53
54 // use error-code
55 int func2_ec()
56 {
57     if (!op1()) {
58         // log
59         // clean up
60         return S_FAILED;
61     }
62
63     if (!op2()) {
64         // log
65         // clean up
66         return S_FAILED;
67     }
68
69     if (!op3()) {
70         // log
71         // clean up
72         return S_FAILED;
73     }
74
75 // ...
76
77     if (!opN()) {
78         // log
79         // clean up
80         return S_FAILED;
81     }
82
83     return S_OK;
84 }
85
86 int func2_on_error_goto()
87 {
88     if (!op1()) goto FAILED;
89     if (!op2()) goto FAILED;
90     // ...
91     if (!opN()) goto FAILED;
92
93     return S_OK;
94
95 FAILED:
96     return S_FAILED;
97 }


所有评论,共0条:( 我也来说两句)


发表评论

注册登录后再发表评论