Следующее определение A должно быть заменено на B :
A
B
#define A B
В то время как это определяет A как псевдоним для типа B :
typedef B A;
Почему? Разве это не бессвязно?