multiple returns in C
Posted Jan 28, 2010 3:46 UTC (Thu) by
thedevil (subscriber, #32913)
In reply to:
LCA: Static analysis with GCC plugins by jwakely
Parent article:
LCA: Static analysis with GCC plugins
Actually there's a better way to do this even in C:
static int foobar_return_handler(void* some_pointer, int destruct, int result)
{
if (some_pointer)
free(some_pointer);
if (destruct)
do_destruct();
return result;
}
int foobar()
{
void* some_pointer = malloc(sizeof(some_type));
if (!some_pointer)
return foobar_return_handler(0, 1, -1);
int foo_result = foo(some_pointer);
if (foo_result < 0)
return foobar_return_handler(some_pointer, 1, foo_result);
int bar_result = bar(some_pointer, foo_result);
if (bar_result < 0)
return foobar_return_handler(some_pointer, 1, bar_result);
return foobar_return_handler(some_pointer, 0, bar_result);
}
(
Log in to post comments)