Re: [PATCH 1/2] add macro REALLOCARRAY
From: Jeff King <hidden>
Date: 2016-06-15 23:02:32
On Mon, Sep 15, 2014 at 11:24:04AM -0700, Junio C Hamano wrote:
René Scharfe [off-list ref] writes:quoted
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 <redacted> ---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