Re: pgindent vs try/catch - Mailing list pgsql-hackers
From | Gaetano Mendola |
---|---|
Subject | Re: pgindent vs try/catch |
Date | |
Msg-id | 4144D8B9.8040504@bigfoot.com Whole thread Raw |
In response to | pgindent vs try/catch (Tom Lane <tgl@sss.pgh.pa.us>) |
Responses |
Re: pgindent vs try/catch
|
List | 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-----
pgsql-hackers by date: