Это часто делается для переносимости кода и особенно актуально для встраиваемых систем.
Предположим, у вас есть целочисленные значения, которые ДОЛЖНЫ быть 32-битными. Может быть, им нужно сопоставить со структурой сети / диска, может быть, им нужно хранить значения этой величины или что-то в этом роде.
Теперь предположим, что вы разрабатываете свой код на компиляторе, где значение int равно 32 битам. Вы пишете ...
struct s {
int a,b,c,d;
}
... и работает нормально. Но если вам нужно переключиться на компилятор, где int только 16-битный, а long 32, вам нужно изменить все эти объявления на
struct s {
long a,b,c,d;
}
Хуже того, вы не можете просто искать / заменять, потому что некоторые из "целых" вам, вероятно, не важны по размеру. Итак, лучший подход к этому:
typedef long INT32; // change this typedef according to compiler
struct s {
INT32 a,b,c,d;
}
Затем все, что вам нужно, это изменить typedefs.