Originally Posted by technosavvy
please expain in a bit elaborative way...:)
I found Salem's answer very informative.
However, if you put this at the top of a working program it will not compile:
typedef DoesNotExist AnotherNameForDoesNotExist;
But this will:
typedef struct DoesNotExist AnotherNameForDoesNotExist;
So it is really about the "struct" keyword and not "typedef".
To some degree, all structs are apparently considered to be of the same "type".
This might relate to C's separate struct namespace, which always seemed kind
of weird (useless) to me, but there must be some reason.

As for FILE, in MinGW's stdio.h it is declared like this:
/* The structure underlying the FILE type.
 * I still believe that nobody in their right mind should make use of the
 * internals of this structure. */

typedef struct _iobuf
    char* _ptr;
    int   _cnt;
    char* _base;
    int   _flag;
    int   _file;
    int   _charbuf;
    int   _bufsiz;
    char* _tmpfname;
So you could get at it, but there's really no point.