Mittels typedef kann man aliasnamen für Typen erstellen. Nehmen wir einmal an, wir wollen ein Programm für 100.000 verschiedene Plattformen/Betriebssysteme/etc. schreiben. Der Typ int ist dann ja überall unterschiedlich groß - das kann natürlich zu Problemen führen. Wir erstellen also ein typedef für Int32 - ein 'int' mit mindestens 32Bit.
//annahme char==1Bit, short==16Bit, int==32Bit
//zB auf win32
typedef char Int8;
typedef short Int16;
typedef int Int32;
Wir haben neue Typen erstellt. Wir können statt int einfach Int32 schreiben. Natürlich muss man diese typedefs auf jeder Zielplattform anpassen - aber dieser Aufwand ist nicht sonderlich groß.
Allerdings ist ein typedef nur ein Aliasname - dies merkt man zB bei Überladung:
typedef int WasAnderes;
void foo(int i)
{
}
void foo(WasAnderes w) //fehler, foo(int) bereits definiert
{
}