Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 01 May 2009 01:33:28 -0700
From:      Julian Elischer <julian@elischer.org>
To:        Christoph Mallon <christoph.mallon@gmx.de>
Cc:        rick-freebsd2008@kiwi-computer.com, freebsd-hackers@FreeBSD.org
Subject:   Re: C99: Suggestions for style(9)
Message-ID:  <49FAB3D8.90607@elischer.org>
In-Reply-To: <49FA8E88.1040905@gmx.de>
References:  <20090428114754.GB89235@server.vk2pj.dyndns.org>	<20090430.090226.1569754707.imp@bsdimp.com>	<20090430233648.GA95360@keira.kiwi-computer.com>	<20090430.183727.803597558.imp@bsdimp.com> <49FA8E88.1040905@gmx.de>

next in thread | previous in thread | raw e-mail | index | archive | help
Christoph Mallon wrote:
> M. Warner Losh schrieb:
>> In message: <20090430233648.GA95360@keira.kiwi-computer.com>
>>             "Rick C. Petty" <rick-freebsd2008@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@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49FAB3D8.90607>