Ну, с точки зрения C ++, программист C ++, использующий ваш код, может иметь что-то вроде:
template<typename T> class String
{
typedef T char_type;
// ...
};
Теперь, если в вашем C-коде вы написали что-то вроде:
#define char_type uint32_t // because I'm using UTF-32
Что ж, у вас будут серьезные проблемы с пользователями вашего заголовочного файла. С помощью typedefs вы можете изменить значение typedef в разных областях ... пока области не соблюдаются с помощью # define.
Я знаю, что вы пометили этот C, но программисты C и C ++ должны понимать, что их заголовки могут использоваться друг другом ... и это одна из тех вещей, о которых следует помнить.