Re: typedef struct LogicalDecodingContext

From: Peter Smith <smithpb2250(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: typedef struct LogicalDecodingContext
Date: 2023-03-02 02:17:18
Message-ID: CAHut+Psfu_+cgKJcNcGPnb9BcuVzA7HvGMiFD9i0-yqo+5sc8A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Mar 2, 2023 at 12:40 PM Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>
> I wrote:
> > Peter Smith <smithpb2250(at)gmail(dot)com> writes:
> >> On Thu, Mar 2, 2023 at 10:04 AM Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> >>> Sadly, this is almost certainly going to cause bitching on the part of
> >>> some compilers, because depending on the order of header inclusions
> >>> they are going to see multiple typedefs for the same name.
>
> >> So does your reply mean there is no way really to be sure if such
> >> changes are OK or not, other than to push them and then revert them
> >> if/when one of the BF animals complains?
>
> > We know which compilers don't like that, I believe, but you'd have
> > to dig in the commit log or mail archives to find out.
>
> I looked into the C standard to see what I could find about this.
> C99 specifically describes the use of "struct foo" to forward-declare
> a struct type whose meaning will be provided later. It also says
>
> [#8] If a type specifier of the form
> struct-or-union identifier
> or
> enum identifier
> occurs other than as part of one of the above forms, and a
> declaration of the identifier as a tag is visible, then it
> specifies the same type as that other declaration, and does
> not redeclare the tag.
>
> which appears to me to specifically authorize the appearance of
> multiple forward declarations. On the other hand, no such wording
> appears for typedefs; they're just plain identifiers with the same
> scope rules as other identifiers. Maybe later versions of the C
> spec clarify this, but I think duplicate typedefs are pretty
> clearly not OK per C99. Perhaps with sufficiently tight warning
> or language-version options, you could get modern gcc or clang to
> complain about it.

I was reading this post [1], and more specifically, this specification
note [2] which seems to explain things

Apparently, not all C99 compilers can be assumed to work using the
strict C99 rules. So I will abandon this idea.

Thanks for your replies.

------
[1] https://stackoverflow.com/questions/26240370/why-are-typedef-identifiers-allowed-to-be-declared-multiple-times/26240595#26240595
[2] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1360.htm

Kind Regards,
Peter Smith.
Fujitsu Australia

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message wangw.fnst@fujitsu.com 2023-03-02 02:32:21 RE: Logical replication timeout problem
Previous Message Tom Lane 2023-03-02 02:16:45 Re: typedef struct LogicalDecodingContext