Typedef is very useful for portable names, tag names (typedef struct foo Foo;) and keeping complicated (function) declarations readable (typedef int (*cmpfunc
typedef struct foo Foo;
typedef int (*cmpfunc
A typedef is, by definition, an alias. As such, you always could replace the alias with the actual type. It wouldn't be an alias otherwise.
typedef
That doesn't mean avoiding typedef would be a good idea.