Redeclaration of typedef Names
The typedef declaration can be used to redeclare the same name to refer to the same type. For example:
// FILE1.H
typedef char CHAR;
// FILE2.H
typedef char CHAR;
// PROG.CPP
#include "file1.h"
#include "file2.h" // OK
The program PROG.CPP includes two header files, both of which contain typedef declarations for the name CHAR. As long as both declarations refer to the same type, such redeclaration is acceptable.
A typedef cannot redefine a name that was previously declared as a different type. Therefore, if FILE2.H contains
// FILE2.H
typedef int CHAR; // Error
the compiler issues an error because of the attempt to redeclare the name CHAR to refer to a different type. This extends to constructs such as:
typedef char CHAR;
typedef CHAR CHAR; // OK: redeclared as same type
typedef union REGS // OK: name REGS redeclared
{ // by typedef name with the
struct wordregs x; // same meaning.
struct byteregs h;
} REGS;