Ok, the C99 standard says in section 6.5.6 Types:
There are five standard signed integer types, designated as signed
char, short int, int, long int, and long long int.
(These and other types may be designated in several additional ways,
as described in 6.7.2.) There may also be implementation-defined
extended signed integer types. The standard and extended signed integer types are collectively called signed integer types.
And furthermore:
The type char, the signed and unsigned integer types, and the
floating types are collectively called the basic types. Even if the
implementation defines two or more basic types to have the same
representation, they are nevertheless different types.
Which makes it pretty clear that they have to be distinct types, even if in C, which doesn't have templates, function overloading and typeid
it may not be that practically important as in C++, where those types being the same type would definitely break much code.
EDIT: In fact because of this lesser practical relevance of type distinctness in C and the absence of the above mentioned language features, I cannot come up with a reliable way to test the absolute distinctness of two types right away.