Python Front-end to GCC

Grant Edwards invalid at invalid.invalid
Tue Oct 22 14:49:58 EDT 2013


On 2013-10-22, Steven D'Aprano <steve+comp.lang.python at pearwood.info> wrote:
> On Tue, 22 Oct 2013 16:53:07 +0000, Frank Miles wrote:
>
> [snip C code]
>> What you're missing is that arr[] is an automatic variable.  Put a
>> "static" in front of it, or move it outside the function (to become
>> global) and you'll see the difference.
>
> Ah, that makes sense. Thanks to everyone who corrected my 
> misunderstanding.
>
> Well, actually, no it doesn't. I wonder why C specifies such behaviour? 
> Why would you want non-global arrays to be filled with garbage?

Firstly, it's not non-global arrays that have undefined contents. 
It's _auto_ arrays that have undefined contents.

void foo(void)
{
  int a[4];   // non-global, _auto_ variable and has undefined contents
}

void bar(void)
{
  static int a[4];  // non-global, _static_ variable initially 0's
}

As to _why_ it's that way, you'd have to ask the guys who decided
that.  I supect it's because zeroing static variables involves very
little run-time overhead, while zeroing auto variables could cause
huge amounts of overhead if that auto variable is declared inside the
innermost of nested loops.  [Presumably a good optimizing compiler
would not zero an auto variable that was always set before it was
referenced, but it takes a lot of smarts for compiler to figure that
out correctly 100% of the time -- probably more smarts than a PDP-11
had room for.]

-- 
Grant Edwards               grant.b.edwards        Yow! Let's send the
                                  at               Russians defective
                              gmail.com            lifestyle accessories!



More information about the Python-list mailing list