In the 7.1.3 of the C11 standard are listed some rules about which are the reserved identifiers.
At the end is said:
No other identifiers are reserved. If the program declares or defines an identifier in a context in which it is reserved (other than as allowed by 7.1.4), or defines a reserved identifier as a macro name, the behavior is undefined.
However, if I try with GCC to break one of those rules, for example I write something like int __A;
the compiler tells me nothing. Now maybe I did not understand well, but then which of those rules define the fact that you can have an undefined behavior?