From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Joe Nelson <joe(at)begriffs(dot)com> |
Cc: | Isaac Morland <isaac(dot)morland(at)gmail(dot)com>, "Smith, Peter" <peters(at)fast(dot)au(dot)fujitsu(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Proposal: Make use of C99 designated initialisers for nulls/values arrays |
Date: | 2019-10-02 15:46:01 |
Message-ID: | 7318.1570031161@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Joe Nelson <joe(at)begriffs(dot)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;
and then decreeing that it's not project style to use a partial
initializer other than in this way.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2019-10-02 15:52:38 | Re: WIP: Generic functions for Node types using generated metadata |
Previous Message | Joe Nelson | 2019-10-02 15:34:20 | Re: Proposal: Make use of C99 designated initialisers for nulls/values arrays |