According to section 6.2.7 of C99 (see also bullet 14 of Appendix J):
All declarations that refer to the same object or function shall have compatible type; otherwise, the behavior is undefined.
Identifiers in mutually visible scopes must be deemed unique by the compiler, to prevent confusion about which variable or function is being referenced. Implementations can allow additional nonunique characters to be appended to the end of identifiers, making the identifiers appear unique while actually being indistinguishable.
...