The naming of things is getting a bit messy. I'd like to propose a convention that I use in my work. It's compatible with the last draft of PDD 7 that I could find: http://www.mail-archive.com/perl6-internals%40perl.org/msg03422.html
By example: struct somename_t { ... }; typedef struct somename_t { ... }* Somename; The non-typedef'd name of a struct type ends in _t. (If you don't mind typing the 'struct', then surely you won't mind typing the _t.) Typedef'd names are always capitalized (as in PDD 7). If a particular type is almost always used as a pointer (eg Parrot_Interp), then the capitalized name refers to a pointer type. (Think of a Foo as a reference to a struct foo_t). This is the case for nearly all struct typedefs. Some things are *never* used without going through a pointer, in which case the _t version is unnecessary. I usually only use _t names for recursive data structures like linked lists and trees. But maybe some compilers don't like Foo foo = (Foo) malloc(sizeof(*foo)); ? Does ANSI allow using sizeof on a variable declared on the same line? The current struct Parrot_Interp { ... }; would become typedef struct Parrot_interp_t { ... }* Parrot_Interp; or if you like splitting things up struct Parrot_interp_t { ... }; typedef struct Parrot_interp_t* Parrot_Interp; and in the gazillion places where 'struct Parrot_Interp *' is used, we'd use 'Parrot_Interp' instead. Imagine, we'll save 8 bytes * 1 gazillion occurrences! More function declarations will fit on a line! World peace will ensue and the moon will become habitable again! If people have visceral objections to typedef'ing pointers, I'm fine with dropping that part of the proposal. I'd just like to see struct Stack_Entry *push_generic_entry(struct Parrot_Interp *, struct Stack_Entry **top, void *thing, INTVAL type, void (*cleanup)(struct Stack_Entry *)); become more like Stack_Entry push_generic_entry(Parrot_Interp, Stack_Entry *top, void *thing, INTVAL type, void (*cleanup)(Stack_Entry)); Oops. Except PDD 7 says that it's Stack_Entry push_generic_entry(Parrot_Interp, Stack_Entry *top, void *thing, INTVAL type, void (*cleanup)(Stack_Entry)); (someday I'll figure out why our stacks are obsessed with passing back their tops all the time.)