From: dewar@gnat.com (Robert Dewar)
Subject: Re: Localized Variable Declaration
Date: 31 May 2002 17:58:43 -0700
Date: 2002-06-01T00:58:44+00:00 [thread overview]
Message-ID: <5ee5b646.0205311658.52211e12@posting.google.com> (raw)
In-Reply-To: 3CF78D3D.3030400@yahoo.com
David Rasmussen <pinkfloydhomer@yahoo.com> wrote in message news:<3CF78D3D.3030400@yahoo.com>...
> You can do the same thing in C++ by just doing
>
> int whatever(int foo)
> {
> ...
> ...
> { // local scope starts here
> int local = 42;
> ....
> } // and ends here
> ...
> }
Yes, sure, and the interesting thing is that in my experience it is far
more common to see extensive use of local declare blocks in Ada than it
is in C. I don't know why this is, because indeed narrowing the scope of
variables is an important issue for readability.
Personally I like a local declarative block being announced clearly with
declare, for me the use of { is too overloaded. For example:
while (*a++ = *b++)
{
stuff
}
and
while (*a++ = *b++);
{
stuff
}
are uncomfortably close, and I prefer having a very definite keyword that
announces a local declare block.
As for not allowing declarations in the middle of statements, this is
very deliberate for several reasons.
Two significant reasons are:
The semantics of embedded declarations is nasty with respect to whether they
are allowed within control structures, what happens if a goto skips over them,
etc.
Forcing the use of a declare forces the writer to think about the scope of
the declarations that are introduced and end the scopes appropriately. The
C++ approach makes it easier for the programmer to ignore this, and by default
let the scope extend to the end.
Note that it is definitely not the case that C++ can do more than Ada here,
just that you have to be noisier about it in Ada. That's a choice we often
make, because we unconditionally favor the reader over the writer (for
example, consider unchecked conversion vs a cast).
next prev parent reply other threads:[~2002-06-01 0:58 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-05-31 13:24 Localized Variable Declaration David Rasmussen
2002-05-31 13:32 ` martin.m.dowie
2002-05-31 13:38 ` David Rasmussen
2002-05-31 13:50 ` martin.m.dowie
2002-05-31 14:48 ` David Rasmussen
2002-05-31 15:26 ` martin.m.dowie
2002-05-31 15:45 ` David Rasmussen
2002-05-31 18:30 ` Jeffrey Carter
2002-06-02 2:21 ` steve_H
2002-06-02 9:59 ` David Rasmussen
2002-06-02 15:06 ` Robert Dewar
2002-06-02 15:27 ` David Rasmussen
2002-06-02 23:25 ` Hyman Rosen
2002-06-02 23:28 ` David Rasmussen
2002-06-02 23:52 ` martin.m.dowie
2002-06-02 23:58 ` David Rasmussen
2002-06-03 11:22 ` martin.m.dowie
2002-05-31 15:51 ` Mark Johnson
2002-05-31 17:47 ` martin.m.dowie
2002-05-31 21:53 ` tmoran
2002-06-02 15:10 ` Robert Dewar
2002-06-02 15:28 ` Vinzent Hoefler
2002-06-02 18:04 ` tmoran
2002-06-07 3:32 ` Richard Riehle
2002-05-31 15:59 ` Darren New
2002-06-02 15:20 ` Robert Dewar
2002-06-03 5:29 ` Michael Bode
2002-06-03 6:17 ` Preben Randhol
2002-06-04 10:26 ` Simon Wright
2002-06-03 13:59 ` Marin David Condic
2002-06-05 8:36 ` Dmitry A.Kazakov
2002-06-03 17:29 ` Pascal Obry
2002-06-16 23:34 ` Robert A Duff
2002-06-04 12:13 ` Georg Bauhaus
2002-05-31 19:00 ` Mike Silva
2002-06-01 0:58 ` Robert Dewar [this message]
2002-05-31 18:04 ` Larry Kilgallen
2002-05-31 15:06 ` Marin David Condic
2002-06-01 14:53 ` Stephen Leake
2002-06-02 21:18 ` Florian Weimer
2002-06-11 7:16 ` David Thompson
2002-05-31 18:30 ` Stephen Leake
2002-06-02 1:52 ` Stefan Skoglund
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox