[OpenAFS-devel] Fwd: [patch review] libafs solaris cleanup
Garance A Drosihn
drosih@rpi.edu
Thu, 15 Feb 2007 18:37:09 -0500
At 7:55 PM -0500 2/13/07, Marcus Watts wrote:
>Garance Alistair Drosehn writes:
>...
> > For what it's worth, sometime in my early freebsd days it was
>> explained to me that 'return (blah)' is preferred simply because
>> it makes it easy to replace 'return' with a #define'd macro, if
> > you needed to do that for some debugging reason.
>>
>
>Ok, sure, for some sufficiently simple program
> #define bug(x) printf ("__FILE__:__LINE__ return %#lx\n",(x)),(x)
> main(){
> return (5);
> }
>you could compile it with
> cc -Dreturn=bug
>or with just cc
>
>I don't think anybody is ever going to do anything remotely
>like this with openafs.
I have done things like this with packages just as nasty and
low-level as openafs. I have not used 'printf' statements, of
course, but I have done things like adding assert-like statements.
"if our global pointer is zero right now, then come to a screeching
halt!". Or I stuff away some value in a global variable, which I
can go back and look at later on. I know I've done this when
debugging things in samba, and it's hard for me to imagine why
such a trick would *never* be useful to do in openafs.
Note that I don't mean to be arguing that openafs must include
commas on return statements. I'm just passing along what I was
told back when I asked about them in the style(9) guidelines used
by FreeBSD.
>Just for starters, you'd have to rely
>on return falling off the end of the function and returning the
>last expression evaluated.
I'm not sure what you're saying here. Why would a return statement
fall off the end of a function? What does that even mean? It is
possible you could get to the end of a function without hitting
an explicit 'return someval;' statement, but don't most compilers
already warn you about that anyway? Yes, you can ignore the
warning and then this trick with redefining 'return()' would not
be reliable -- but at least you were warned that it wouldn't work.
>I've always thought that return() was leftover from b or bcpl
>syntax. In bcpl it's "RESULTIS" - no () required. Looks like b
>requires () though, so I think that's the origin of this convention.
For what it's worth, here is an excerpt from some message sent to a
freebsd mailing list back in 2001:
| I asked Dennis Ritchie about this some time back.
| Here's the reply:
|
| > Date: Fri, 11 Feb 2000 01:36:53 -0500
| > From: dmr@plan9.bell-labs.com
| > To: grog@lemis.com
| > Subject: Re: 'return expression' or 'return (expression)'?
| >
| >> I've been wondering about the tradition of writing 'return
| >> (expression)' instead of 'return expression' in C code. The
| >> earliest documentation I have (K&R I) suggests I use the former
| >> (page 68), without specifying why, while appendix A (page 218)
| >> specifies 'return expression'.
| >
| >> I got hold of last1120 and compiled and ran it against a test
| >> program, and it seems that this version won't accept the syntax
| >> 'return expression': the parentheses are mandatory. Would it
| >> be fair to consider the usage 'return (expression)' as an
| >> archaism?
| >
| > An archaism: just so. The language and compiler ca. 1973 did
| > want the parens. By the 5th edition (1975) I had realized that
| > they weren't needed and the syntax was just 'return expression'.
| >
| > On the other hand, no one seemed to want to make use of the new
| > freedom. I glanced at v7 source (1977) and couldn't find any
| > instances of non-parenthesized return values-- I might have
| > missed an instance, but there couldn't have been more than a
| > very few. Evidently it had become wired into the mental syntax.
| >
| > This was certainly true for Brian in K&R 1 and evidently
| > for me as well, since the very few examples in the appendix
| > use the (). But the grammar does indeed reflect the fact
| > that they weren't required.
| >
| > Dennis
As for me (garance), I didn't write any programs in C until the late
1980's, so I am too much of a newbee to comment on the language. :-)
--
Garance Alistair Drosehn = gad@gilead.netel.rpi.edu
Senior Systems Programmer or gad@freebsd.org
Rensselaer Polytechnic Institute or drosih@rpi.edu