Branko Čibej wrote on Tue, Aug 11, 2015 at 21:55:48 +0200:
> On 11.08.2015 17:02, Philip Martin wrote:
> > Stefan Fuhrmann <[email protected]> writes:
> >
> >> way we use sizeof. In my opinion, we should take the
> >> size of the created or processed variable instead of its
> >> type, i.e.
> >>
> >> abc_t *v = apr_pcalloc(pool, sizeof(*v));
> >> apr_hash_set(hash, key, sizeof(*key), y);
> >> z = apr_hash_get(hash, key, sizeof(*key));
> >>
> >> rather than
> >>
> >> abc_t *v = apr_pcalloc(pool, sizeof(abc_t));
> >> apr_hash_set(hash, key, sizeof(key_t), y);
> >> z = apr_hash_get(hash, key, sizeof(key_t));
Both of these variants are redundant. We could encapsulate the
redundancy in a macro:
#define SVN__CALLOC(obj, pool) do { (obj) = apr_pcalloc((pool),
sizeof(*(obj))); } while (0)
{
abc_t *v;
SVN__CALLOC(v, pool);
}
> > We have had problems with both styles in the past, so neither is immune
> > to bugs. I prefer the explicit type as it is easier to grep.
>
> The explicit type form is more accident-prone than the variable form
> because any change requires two modifications in the same statement
> instead of one.
Why doesn't the compiler or buildbot catch accidents?