From: | Gaetano Mendola <mendola(at)bigfoot(dot)com> |
---|---|
To: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
Cc: | Gaetano Mendola <mendola(at)bigfoot(dot)com>, Andrew Dunstan <andrew(at)dunslane(dot)net>, "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: pgindent vs try/catch |
Date: | 2004-09-12 23:16:09 |
Message-ID: | 4144D8B9.8040504@bigfoot.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Bruce Momjian wrote:
| Gaetano Mendola wrote:
|
|>>I had that argument a while ago with Bruce and lost :-) . It does horrible
|>>things to if/else constructs too. The workaround is to put a comment in the
|>>block. On the whole I agree with you, though. If I put braces in my program
|>>it's for a reason, and the indenter shouldn't think it knows better than me.
|>
|>Well I'm not exactly a C coder, I'm a C++ one and it's quite common use the
|>extra scope in order to reduce the automatic variable life, I don't know how
|>much the extra scope are used in the C world, however remove an "extra scope"
|>like that is not only "horrible", is *wrong* and can be cause of future pain:
|>
|>
|>foo ( int a )
|>{
|> ...
|> {
|> int a;
|> }
|> // use the formal parameter
|>}
|>
|>if the extra scope is removed the local variable "shadow" the formal
|>parameter. Some compilers do not warning you, IIRC the Digital had this funny omission,
|>( however you can miss the warning ) and hours of debugging are behind the corner.
|>I hope that Bruce change his mind...
|
|
| I am a little confused by the above. It only removes braces that have
| one command in them.
This was not clear to me.
| What does "use the formal parameter" mean?
Emm, the variable argument I mean, is not "formal parameter" the right name ?
| FYI, C doesn't allow variables to be declared in for() like that, but I am
| still curious how C++ handles such cases.
the { ... } in c++ represent an extra scope this means that at the end of the
scope all variable declared inside are destroyed. A common way to use it is to
surround critical sections:
void foo( int a )
{
~ Mutex m;
~ ...
~ {
~ Lock myLock(m); // The lock is acquired inside the constructor
~ int a = 5;
~ //critical section code follow
~ ...
~ } // The unlock is performed in the destructor
};
at the end of the scope the destructor for the variable myLock is called.
In this way the lock is released ( with the appropriate code in the destructor)
without remember to unlock it and most important the lock is released also if
an exception is thrown; inside that extra scope the variable
"a" hide the function parameter, this code is perfectly legal in C++.
In the case of the for if you declare for ( A a = ... ) { } the lifespan
for the object a is the "for" body, and ansi C++ allow the reuse so you can have:
for ( A a = ... ) { }
for ( A a = ... ) { }
| I have no problem in removing this pgindent behavior.
I don't know all the implication in removing it or leave it, however I agree to
leave the extra scope in place.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (MingW32)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
iD8DBQFBRNi37UpzwH2SGd4RAgrlAKDo+xL+Vo8+2vyfpnhxmmPyEJOhXwCgpc4h
8cdAPGv/fqWE3UY2bRe4rlI=
=Wbra
-----END PGP SIGNATURE-----
From | Date | Subject | |
---|---|---|---|
Next Message | Daniel Schuchardt | 2004-09-13 00:04:05 | Re: beta1 & beta2 & Windows & heavy load |
Previous Message | Tom Lane | 2004-09-12 23:04:42 | Re: beta1 & beta2 & Windows & heavy load |