File tree Expand file tree Collapse file tree 1 file changed +28
-22
lines changed Expand file tree Collapse file tree 1 file changed +28
-22
lines changed Original file line number Diff line number Diff line change 1
1
# <a name="main"></a>C++ Core Guidelines
2
2
3
- July 3, 2020
3
+ August 3, 2020
4
4
5
5
6
6
Editors:
@@ -16187,25 +16187,27 @@ This can be messy:
16187
16187
{
16188
16188
Gadget g1 = make_gadget(17);
16189
16189
if (!g1.valid()) {
16190
- return {0, g1_error};
16190
+ return {0, g1_error};
16191
16191
}
16192
16192
16193
- Gadget g2 = make_gadget(17 );
16193
+ Gadget g2 = make_gadget(31 );
16194
16194
if (!g2.valid()) {
16195
- cleanup(g1);
16196
- return {0, g2_error};
16195
+ cleanup(g1);
16196
+ return {0, g2_error};
16197
16197
}
16198
16198
16199
16199
// ...
16200
16200
16201
16201
if (all_foobar(g1, g2)) {
16202
- cleanup(g1);
16203
16202
cleanup(g2);
16203
+ cleanup(g1);
16204
16204
return {0, foobar_error};
16205
+ }
16206
+
16205
16207
// ...
16206
16208
16207
- cleanup(g1);
16208
16209
cleanup(g2);
16210
+ cleanup(g1);
16209
16211
return {res, 0};
16210
16212
}
16211
16213
@@ -16215,31 +16217,35 @@ A not uncommon technique is to gather cleanup at the end of the function to avoi
16215
16217
std::pair<int, error_indicator> user()
16216
16218
{
16217
16219
error_indicator err = 0;
16220
+ int res = 0;
16218
16221
16219
16222
Gadget g1 = make_gadget(17);
16220
16223
if (!g1.valid()) {
16221
- err = g1_error;
16222
- goto exit ;
16224
+ err = g1_error;
16225
+ goto g1_exit ;
16223
16226
}
16224
16227
16225
16228
{
16226
- Gadget g2 = make_gadget(17 );
16227
- if (!g2.valid()) {
16229
+ Gadget g2 = make_gadget(31 );
16230
+ if (!g2.valid()) {
16228
16231
err = g2_error;
16229
- goto exit ;
16230
- }
16232
+ goto g2_exit ;
16233
+ }
16231
16234
16232
- if (all_foobar(g1, g2)) {
16233
- err = foobar_error;
16234
- goto exit;
16235
- }
16236
- // ...
16235
+ if (all_foobar(g1, g2)) {
16236
+ err = foobar_error;
16237
+ goto g2_exit;
16238
+ }
16239
+
16240
+ // ...
16241
+
16242
+ g2_exit:
16243
+ if (g2.valid()) cleanup(g2);
16237
16244
}
16238
16245
16239
- exit:
16240
- if (g1.valid()) cleanup(g1);
16241
- if (g2.valid()) cleanup(g2);
16242
- return {res, err};
16246
+ g1_exit:
16247
+ if (g1.valid()) cleanup(g1);
16248
+ return {res, err};
16243
16249
}
16244
16250
16245
16251
The larger the function, the more tempting this technique becomes.
You can’t perform that action at this time.
0 commit comments