Re: [PATCH 1/7] Rework strbuf API and semantics.
- From
Jeff King <peff@peff.net>
- Date
- Sep 6, 2007, 15:36 UTC
- Message-ID
- <20070906153613.GA4008@coredump.intra.peff.net>
- In-Reply-To
- <85tzq7bzoz.fsf@lola.goethe.zz>
On Thu, Sep 06, 2007 at 05:06:52PM +0200, David Kastrup wrote:
Show 8 quoted lines
> > If an object that has automatic storage duration is not initialized > > explicitly, its value is indeterminate. 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; > > That's actually a new one to me. I don't think that it has been > always the case in ANSI C.
I don't have the C89 standard, so it's hard to be authoritative. However, according to TCOR1 to the C89 standard, the original text of 6.5.7 contained:
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.
and was changed to:
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 zero;
- if it is an aggregate, every member is initialized (recursively)
according to these rules; - if it is a union, the first named member is initialized
(recursively) according to these rules.But for the case of pointer initializations, both have the same effect. So I think it has always been the case. Pre-ANSI, who knows. :)
You can find TCOR1 here:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/tc1.htm
And now I must go get some real work done instead of snooping through standards. :)
-Peff