On Wed, Oct 2, 2019 at 9:16 PM Tom Lane <t...@sss.pgh.pa.us> wrote:

> Joe Nelson <j...@begriffs.com> writes:
> > Isaac Morland wrote:
> >> I hope you'll forgive a noob question. Why does the "After"
> >> initialization for the boolean array have {0} rather than {false}?
>
> > I think using a value other than {0} potentially gives the incorrect
> > impression that the value is used for *all* elements of the
> > array/structure, whereas it is only used for the first element.
>
> There's been something vaguely bothering me about this proposal,
> and I think you just crystallized it.
>
> > Using {false} may encourage the unwary to try
> >       bool foo[2] = {true};
> > which will not set all elements to true.
>
> Right.  I think that in general it's bad practice for an initializer
> to not specify all fields/elements of the target.  It is okay in the
> specific case that we're substituting for a memset(..., 0, ...).
> Perhaps we could make this explicit by using a coding style like
>
> /* in c.h or some such place: */
> #define INIT_ALL_ZEROES  {0}
>
> /* in code: */
>         Datum values[N] = INIT_ALL_ZEROES;
>

This is a good idea, but by reading the thread it is not completely clear
if we want to pursue this or want to explore something else or leave the
current code as it is.  Also, if we want to pursue, do we want to
use INIT_ALL_ZEROES for bool arrays as well?

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com

Reply via email to