[ros-dev] Re: [ros-svn] [gdalsnes]
18113: -reorder InsertXscendingOrder
macro argument order and update uses
Nathan Woods
npwoods at cybercom.net
Wed Sep 28 01:14:36 CEST 2005
Gunnar Dalsnes wrote:
> In win32k i use macros for flow control in the NtUser syscalls
> (functionally like a try/finally block) where its very important that
> some cleanup (release a lock) is always done:
>
> BOOL NtFunc()
> {
> DECLARE_RETURN(BOOL);
>
> Lock();
> if (Stuff) RETURN(FALSE);
> ....
> RETURN(TRUE);
>
> CLEANUP:
> Unlock(Stuff);
> DPRINT1("NtFunc returned %i\n", _ret_);
> END_CLEANUP;
> }
Patterns like this can be done without macros. I've always been partial
to the following style:
BOOL NtFunc()
{
BOOL bResult;
void *pPointer = NULL;
Lock();
if (Stuff)
{
bResult = FALSE;
goto cleanup;
}
....
bResult = TRUE;
cleanup:
if (pPointer)
free(pPointer);
Unlock(stuff);
DPRINT1("NtFunc returned %i\n", bResult);
return bResult;
}
I know that many find goto's to be a crime against humanity, but I've
always favored them for this sort of pattern.
-N
More information about the Ros-dev
mailing list