-----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-----


Mon, 13 Sep 2004 01:16:09 +0200
Gaetano Mendola <mendola@bigfoot.com>
Re: pgindent vs try/catch

OK, it never removed braces from things like:

	int x;

	{
		int x;
		x=5;
	}

but anyway I think we all agree it was uglifying the code more than it
was clarifying.

---------------------------------------------------------------------------

Gaetano Mendola wrote:
[ PGP not available, raw data follows ]
> -----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-----
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings
> 
[ End of raw data]

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Sun, 12 Sep 2004 20:41:48 -0400 (EDT)
Bruce Momjian <pgman@candle.pha.pa.us>
Re: pgindent vs try/catch