C99: Suggestions for style(9)
Julian Elischer
julian at elischer.org
Fri May 1 08:33:29 UTC 2009
Christoph Mallon wrote:
> M. Warner Losh schrieb:
>> In message: <20090430233648.GA95360 at keira.kiwi-computer.com>
>> "Rick C. Petty" <rick-freebsd2008 at kiwi-computer.com> writes:
>> : On Thu, Apr 30, 2009 at 09:02:26AM -0600, M. Warner Losh wrote:
>> : > : > This is the biggest one, and I think it may be too soon.
>> Also, we
>> : > need to be careful on the initialization side of things because we
>> : > currently have a lot of code that looks like:
>> : > : > : > struct foo *fp;
>> : > struct bar *bp;
>> : > : > fp = get_foo();
>> : > if (!fp) return;
>> : > bp = fp->bp;
>> : > : > this can't easily be translated to the more natural:
>> : > : > struct foo *fp = get_foo();
>> : > struct bar *bp = fp->bp;
>> : > : > since really you'd want to write:
>> : > : > struct foo *fp = get_foo();
>> : > if (!fp) return;
>> : > struct bar *bp = fp->bp;
>> : > : > which isn't legal in 'C'.
>> : : I thought we were talking about C99, in which case this is
>> perfectly legal.
>> : I certainly use it all the time in my C99 code.
>>
>> Hmmm, looks like that was added. That's ugly as C++...
>
> I do not think, this is ugly. On the contrary, it aids maintainability,
> because it reduces the scope of variables. Also quite some variables are
> only initialised and not changed afterwards, so it's nice to have the
> declaration and the only assignment in a single place. IMO this is a
> quite natural style, because you don't have anything in the code, before
> it is needed: Get the first pointer; if something is wrong, bail out;
> get the second pointer - the second pointer does not (textually) exist
> before it is needed.
>
>> : And I thought this was the point of this discussion, to be able to
>> declare
>> : variables when you first use them.
>>
>> That's one of the proposed changes, which I think is a mistake and
>> would cause the most code churn. And it isn't one of the items that's
>> being discussed: only moving variables into inner scopes is on the
>> table...
>
> No, this is not what I intended. The idea is to limit the scope of local
> variables as much as is sensible. Maybe I should have been more
> explicit. On the other hand, I also did not mention that it is just
> about moving to the start of inner block statements.
I can see moving declarations to an inner scope {} in some cases but
I think allowing us to declare them mixed in with the code,
(even though some compilers allow it) will be a mistake.
I think this was done to allow macros to declare vars they needed.
I'd hate to see it in our code..
>
> Christoph
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
More information about the freebsd-hackers
mailing list