...
Additionally, subclause 7.31 defines many other reserved identifiers for future library directions.
No other identifiers are reserved. (Note that the POSIX standard extends the set of identifiers reserved by the C Standard to include an open-ended set of its own. See section 2.2, "The Compilation Environment," in IEEE Std 1003.1-2013.) The behavior of a program that declares or defines an identifier in a context in which it is reserved or that defines a reserved identifier as a macro name is undefined
...
...
.
Noncompliant Code Example (Header Guard)
...
a macro definition of
errno
is suppressed in order to access an actual object, or the program defines an identifier with the nameerrno
. [ISO/IEC 9899:2011]
(See subclause 7.5, paragraph 2, and undefined behavior 114 in Annex J of the C Standard.)
The errno
identifier expands to a modifiable lvalue that has type int
but is not necessarily the identifier of an object. It might expand to a modifiable lvalue resulting from a function call, such as *errno()
. It is unspecified whether errno
is a macro or an identifier declared with external linkage. If a macro definition is suppressed to access an actual object, or if a program defines an identifier with the name errno
, the behavior is undefined.
...