Повторное объявление имен typedef
Объявление typedef можно использовать для повторного объявления того же имени с указанием того же типа. Например:
// FILE1.H
typedef char CHAR;
// FILE2.H
typedef char CHAR;
// PROG.CPP
#include "file1.h"
#include "file2.h" // OK
Программа PROG.CPP содержит два файла заголовков, в каждом из которых имеются объявления typedef имени CHAR. Если в обеих объявлениях указывается один и тот же тип, такое повторное объявление допустимо.
typedef не может переопределить имя, которое было объявлено как имя другого типа. Поэтому, если файл FILE2.H содержит
// FILE2.H
typedef int CHAR; // Error
компилятор выдает ошибку из-за попытки повторного объявления имени CHAR как имени другого типа. Это правило распространяется также на конструкции, подобные следующим:
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;