Question: Static variable initialization
Rob Landley
rob at landley.net
Wed Feb 24 15:30:32 UTC 2010
On Wednesday 24 February 2010 00:32:53 tike64 at gmail.com wrote:
> Rob Landley wrote:
> > On Tuesday 23 February 2010 12:02:55 Timo wrote:
> >> I would say that it is the responsibility of the compiler toolchain to
> >> make sure that static, not-explicitly-initialized variables are cleared
> >> before entry into the 'main'. It is a requirement of the C-language. So,
> >> if the variables are not cleared, the toolchain is horribly broken.
> >
> > (Could you tell me where in the C language speci it's required? I
> > checked the c99-draft.html I have and couldn't find it, but that doesn't
> > mean much. It _seems_ like something C99 would require, but I haven't
> > tracked down where yet.)
>
> I have "ISO/IEC 9899:TC3 Committee Draft — Septermber 7, 2007". There
> "6.7.8 Initialization" paragraph 10 says:
>
> "...
> If an object that has static storage duration is not initialized
> explicitly, then:
>
> — if it has pointer type, it is initialized to a null pointer;
> — if it has arithmetic type, it is initialized to (positive or unsigned)
> zero; ..."
>
> Actually, this was the first time I read it in the standard myself...
Ah, there it is:
http://busybox.net/~landley/c99-draft.html#6.7.8
Point #10.
Thanks.
Heh, according to that:
union {
char one;
long two;
}
Then "two" isn't guaranteed to have more than its first byte initialized.
(Although I suspect some other part of the spec may address that, and I know
implementations using an ELF bss will...)
I actually read rather a lot of the C99 standard looking for this sort of
thing back when I was maintaining my own tinycc fork. I was trying to get the
sucker to build busybox, uClibc, and the Linux kernel, but every time I put a
couple months of effort into it the original tcc project would start up again
and merge about half my changes (but not any of the refactoring/cleanup work I
was doing, and they kept missing important fixes they "didn't understand".
Sigh.) And then I'd stop working on it for 3 months and the original project
would grind to a halt again. Really darn frustrating. (Especially since once
they'd scraped together enough to put out a release, my tree just couldn't
compete for attention with the owner of the tinycc.org domain. I kept getting
bug reports about the _other_ tree that I'd fixed months if not years
previously...)
I've ignored it for a couple years now. I kept hoping the original project
would die conclusively enough I could restart mine without the zombie lurching
forward again, but since then the zombie's turned into a windows-only thing,
which has only mentioned Linux once since New Year's but has two big threads
this week (each with a half-dozen posts or more) titled "Compile TCC with
Visual Studio 2005" and "using tcc as a cross compile for Windows"...
*shrug*
Rob
--
Latency is more important than throughput. It's that simple. - Linus Torvalds
More information about the busybox
mailing list