Re: [PATCH 1/2] add macro REALLOCARRAY
- From
Jeff King <peff@peff.net>
- Date
- Sep 17, 2014, 08:17 UTC
- Message-ID
- <20140917081753.GC16200@peff.net>
- In-Reply-To
- <xmqqtx487nej.fsf@gitster.dls.corp.google.com>
On Mon, Sep 15, 2014 at 11:24:04AM -0700, Junio C Hamano wrote:
Show 21 quoted lines
> René Scharfe <l.s.r@web.de> writes: > > > The macro ALLOC_GROW manages several aspects of dynamic memory > > allocations for arrays: It performs overprovisioning in order to avoid > > reallocations in future calls, updates the allocation size variable, > > multiplies the item size and thus allows users to simply specify the > > item count, performs the reallocation and updates the array pointer. > > > > Sometimes this is too much. Add the macro REALLOCARRAY, which only > > takes care of the latter three points and allows users to specify the > > number of items an array can store directly. It can increase and > > also decrease its size. Using this macro avoids duplicating the > > array pointer name and takes care of item sizes automatically. > > > > Signed-off-by: Rene Scharfe <l.s.r@web.de> > > --- > > Makes sense. Originally I had two minor gripes against this > > #1 a macro that modifies its arguments feels a bit too magical, and > we would not want to overuse them.
This is probably getting into the too-magical territory, but I have long considered a macro like:
#define ALLOC(x) (x) = xmalloc(sizeof(*x))
to prevent obvious size-mismatch errors. You could even call the macro NEW() if you wanted to be really disgusting. :)
I rejected it as probably too cutesy (and non-idiomatic for experienced C programmers), but I feel like this REALLOC_ARRAY is basically the same thing. I dunno. It does make the code a bit more readable, once you understand what the macro is doing.
-Peff