Subject: Re: [RFC] struct *_struct

From: Miles Bader <[email-masked]>
Date: Fri, 06 Aug 2010 11:28:23 +0900

Michael Witten <[email-masked]> writes:
> On Wed, Aug 4, 2010 at 14:24, Junio C Hamano <[email-masked]> wrote:
>> I hate... "typedef foo struct foo"
>
> How come?

There is a practical issue in that "struct foo *" can be used with just
a forward declaration (or no declaration at all), whereas "foo *"
requires the declaration of foo be visible.  This is especially handy
given C's use of #include, because in cases where there are circular
type references, it can be very annoying to get things #included in the
right order; being able to use a forward declaration instead of #include
makes it easy to break such loops.  One can still use "struct foo *"
even if there are typedefs, of course, but that breaks the illusion that
"foo" is an abstract type, and I gather that illusion is one reason
people like the typedefs in the first place.

But I think mainly it's an issue of style/culture:

Some codebases use "typedef style" (obviously those in C++, since the
typedefs are automatically), and in those codebases programmers will
naturally choose typenames that are more distinct (e.g., the common
convention of using StudlyCaps for types).  Some codebases use "struct
style" (in C programs I think this is more common, as C-programming
culture tends to value explicitness and simplicity).

One should use follow whatever style is common in the codebase one is
working on.  If git uses "struct foo" generally, new code should use
"struct bar".

-miles

-- 
Arrest, v. Formally to detain one accused of unusualness.