.. index:: errno.h Errors ```` ******************** The header ```` defines several macros, all relating to the reporting of error conditions. .. index:: EDOM macro, EILSEQ macro, ERANGE macro, errno The macros are: EDOM EILSEQ ERANGE which expand to integer constant expressions with type ``int``, distinct positive values, and which are suitable for use in ``#if`` preprocessing directives; and ``errno`` which expands to a modifiable lvalue [#]_ that has type ``int``, the value of which is set to a positive error number by several library functions. It is unspecified whether ``errno`` is a macro or an identifier declared with external linkage. If a macro definition is suppressed in order to access an actual object, or a program defines an identifier with the name ``errno``, the behavior is undefined. The value of ``errno`` is zero at program startup, but is never set to zero by any library function. [#]_ The value of ``errno`` may be set to nonzero by a library function call whether or not there is an error, provided the use of ``errno`` is not documented in the description of the function in this International Standard. Additional macro definitions, beginning with ``E`` and a digit or ``E`` and an uppercase letter, may also be specified by the implementation. .. [#] The macro errno need not be the identifier of an object. It might expand to a modifiable lvalue resulting from a function call (for example, ``*errno()``). .. [#] Thus, a program that uses ``errno`` for error checking should set it to zero before a library function call, then inspect it before a subsequent library function call. Of course, a library function can save the value of ``errno`` on entry and then set it to zero, as long as the original value is restored if ``errno``'s value is still zero just before the return.