Aliasing names with typedef
This keyword promises more than it
delivers: typedef suggests
“type definition” when “alias” would probably have been
a more accurate description, since that’s what it really does. The syntax
is:
typedef existing-type-description
alias-name
People often use typedef when data
types get slightly complicated, just to prevent extra keystrokes. Here is a
commonly-used typedef:
typedef unsigned long ulong;
Now if you say ulong the compiler
knows that you mean unsigned long. You might think that this could as
easily be accomplished using preprocessor substitution, but there are key
situations in which the compiler must be aware that you’re treating a name
as if it were a type, so typedef is essential.
One place where typedef comes in
handy is for pointer types. As previously mentioned, if you
say:
int* x, y;
This actually produces an int*
which is x and an int (not an int*) which is
y. That is, the ‘*’ binds to the right, not the left.
However, if you use a typedef:
typedef int* IntPtr;
IntPtr x, y;
Then both x and y are of
type int*.
You can argue that it’s more
explicit and therefore more readable to avoid typedefs for primitive
types, and indeed programs rapidly become difficult to read when many
typedefs are used. However, typedefs become especially important
in C when used with
struct.