typedef is just a missnomer (like many other keywords). Think of it as typealias .
C has the opposite view of compatible types. This allows, for example, linking compilation units together, even if declarations of function prototypes are executed only with compatible types, and not with identical ones. All this comes from a simple practical necessity in everyday life, still able to give some guarantees for implementation.
source share