in reply to Re: Re: No braces
in thread No braces

Nope. C has always allowed you to declare your variables immediately after the opening brace. I.e., if (a < 5) { int t; ... } is and always has been (to my knowledge) legal C.

Replies are listed 'Best First'.
Re: Re: Re: Re: No braces
by halley (Prior) on Feb 11, 2004 at 20:15 UTC
    The C language allows you to declare variables at different visibility scopes, but all of the runtime cost of that allocation is usually incurred when the function is entered and left. So the following function allocates three words at entry, and frees three words at exit.
    void func() { int a, b; // allocate 3 words for a, b, c, d ... if (b) { int c; // already allocated, now visible ... } if (a) { int d; // recycle word for c, now renamed ... } ... } // a, b, c, d (3 words) all freed

    C++ compilers also usually allocate the stack space when the function is entered and left also, but constructors and destructors must be executed at the marked edges of scope, unless the compiler can prove it would have no effect one way or the other.

    Allocation is a detail left to the compiler, whereas the actual rules of order of operations are defined by the language spec. Play with your "output as assembler" options to check the effects of runtime overhead.

    --
    [ e d @ h a l l e y . c c ]