比这篇新的文章:
千字文有没有重复字?
比这篇旧的文章: enable bash completion in interactive shells
作者: 翁翁, 点击805次, 评论(0), 收藏者(0), , 打分:
所有评论,共0条:( 我也来说两句)
比这篇旧的文章: enable bash completion in interactive shells
异常和error-code的比较
语言: C++, 标签: 无 2008/06/19发布 1年前更新作者: 翁翁, 点击805次, 评论(0), 收藏者(0), , 打分:
C++语言: 异常和error-code的比较
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 }
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条:( 我也来说两句)
代码
