Untitled
By: a guest | Apr 16th, 2009 | Syntax:
C | Size: 1.63 KB | Hits: 52 | Expires: Never
/* Problem: Inefficient and confusing */
int foo(int bar)
{
int return_value = 0;
int doing_okay = 1;
doing_okay = do_something( bar );
if (doing_okay) {
doing_okay = init_stuff();
} else {
cleanup_1();
}
if (doing_okay) {
doing_okay = prepare_stuff();
} else {
cleanup_2();
}
if (doing_okay) {
return_value = do_the_thing( bar );
} else {
cleanup_3();
}
return return_value;
}
/* Problem: Getting murdered by PHB's for using goto */
int foo(int bar)
{
if (!do_something( bar )) {
goto error_1;
}
if (!init_stuff( bar )) {
goto error_2;
}
if (!prepare_stuff( bar )) {
goto error_3;
}
return do_the_thing( bar );
error_1:
cleanup_1();
return 0;
error_2:
cleanup_2();
return 0;
error_3:
cleanup_3();
return 0;
}
/* Problem: Too many nested blocks, horrible */
int foo(int bar)
{
int return_value = 0;
if (do_something( bar )) {
if (init_stuff( bar )) {
if (prepare_stuff( bar )) {
return_value = do_the_thing( bar );
} else {
cleanup_3();
}
} else {
cleanup_2();
}
} else {
cleanup_1();
}
return return_value;
}