I'm working on a library that extensively used constructs like
typedef struct foo_bar_s {
...
} foo_bar_t;
It's a bad idea to use the _t suffix, because it's a POSIX reserved namespace. The _s suffix for structs is also pretty useless. So I thought I can change it all to
typedef struct foo_bar {
...
} foo_bar;
or if the struct name is not needed
typedef struct {
...
} foo_bar;
However, I cannot distinguish typedefs from regular symbols (variables, etc.) anymore. Is this really such a big deal and should I use a different suitable naming scheme for the typedefs? Or does it not matter that much?
I'm really not so sure. What do you think? Also, what recommendations do you have for typedef naming schemes?
I use the naming conventions used in Dave Hanson's C Interfaces and Implementations: a type is named with the module name and a capital T. So for example, the type of sequences is
Seq_T
, and the type of hash tables isTable_T
. Within the implementation of a module Hanson uses#define
to abbreviate just toT
. This is basically Modula-3 conventions applied to C programming, but I find that after a brief initial shock it works well.Although, "_t" is reserved, it is very unlikely that you will encounter a problem. However, this convention is a remnant of older versions of C where this syntax was required in order to name structs, and so nowadays you can simply write something like the following (omitting the typedef and the typedef names):
And yes, you can use single line comments ("//...") in the current standard of C.