[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Compile Error in c99
From: |
Thomas Dickey |
Subject: |
Re: Compile Error in c99 |
Date: |
Thu, 20 Aug 2020 17:28:19 -0400 |
User-agent: |
NeoMutt/20170113 (1.7.2) |
On Thu, Aug 20, 2020 at 09:57:41AM -0400, Randall S. Becker wrote:
> Looking at the current C standard, it appears that the compiler is actually
> wrong about the warning, unless as below. If a scalar, it is supposed to
> initialize to 0 when unspecified. I did run a test on the platform for this
> specific situation and the value of scalars are correctly initialized to 0.
> This was tested in isolation, but succeeded and did not generate the
> warning, making me wonder whether there is something about the TTY type that
> is confusing the compiler at that point. Note that the standard does not
> provide initialization if TTY is a partial type when the static is
> encountered.
quoting from 6.5.7 of ANSI/ISO 9899-1990:
If an object that has static storage duration is not initialized
explicitly. it is initialized implicitly as if every member that has
arithmetic type were assigned 0 and every member that has pointer type
were assigned a null pointer constant.
(TTY aka "struct termios" doesn't have pointers, otherwise some problem
in compiling it as "const" would have surfaced).
> I'm a bit perplexed about the compiler's conduct here.
>
> Regards,
> Randall
>
> --
> Randall S. Becker
> ITUGLIB Process Designer, Repository Manager, Occasional Porting Dude
> +1.416.984.9826
> NonStop developer since approximately 211288444200000000
> UNIX developer since approximately 421664400
> -- In my real life, I talk too much.
>
>
> > -----Original Message-----
> > From: Thomas Dickey <dickey@his.com>
> > Sent: August 20, 2020 4:04 AM
> > To: Randall S. Becker <rsbecker@nexbridge.com>
> > Cc: 'Ncurses Mailing List' <bug-ncurses@gnu.org>
> > Subject: Re: Compile Error in c99
> >
> > On Wed, Aug 19, 2020 at 07:23:29PM -0400, Randall S. Becker wrote:
> > > The c99 compiler used on NonStop caught this one. I think it's legit:
> > >
> > > static const TTY null_TTY; /* all zeros iff uninitialized */
> > >
> > > ^
> > >
> > > "/home/jenkins/.jenkins/workspace/Ncurses_Pipeline/ncurses/../ncurses/
> > > ./base /lib_set_term.c", line 309: warning(338):
> > >
> > > const variable "null_TTY" requires an initializer
> > >
> > > A const scalar should be initialized. Do not depend on the compiler to
> >
> > longstanding practice says that static variables are guaranteed to be
> zeroed
> > (this compiler appears to ignore the "static"). I guess that's something
> to
> > verify vs the C and POSIX standards...
> >
> > > generate initialization code. This may come from whatever is on the
> > > stack instead of memory, which is assumed for globals, but not for
> > > stack variables.
> >
> > static variables aren't on the stack...
> >
> > --
> > Thomas E. Dickey <dickey@invisible-island.net>
> https://invisible-island.net
> > ftp://ftp.invisible-island.net
>
--
Thomas E. Dickey <dickey@invisible-island.net>
https://invisible-island.net
ftp://ftp.invisible-island.net
signature.asc
Description: PGP signature