| Name | Description | Notes | Source | Availability | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| errno_t | Error-number type | ? | T | Headers | C11 | ||||||
| perror() | Report last error | (·) | <stdio.h> | C89 | C90 | C95 | C99 | C11 | |||
| strerror() | Interpret error number | (·) | <string.h> | C89 | C90 | C95 | C99 | C11 | |||
| strerror_s() | Interpret error number | ? | (·) | <string.h> | C11 | ||||||
| 
            strerrorlen_s() | Get length of message interpreting error number | ? | (·) | <string.h> | C11 | ||||||
| Name | Description | Notes | Source | Availability | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| EDOM | Domain-error indicator | M | <errno.h> | C89 | C90 | C95 | C99 | C11 | |||
| EILSEQ | Indicator of illegal multibyte sequence | M | <errno.h> | C95 | C99 | C11 | |||||
| ERANGE | Range-error indicator | M | <errno.h> | C89 | C90 | C95 | C99 | C11 | |||
| errno | Holder of last error number | <errno.h> | C89 | C90 | C95 | C99 | C11 | ||||
Many standard library functions, when they report an
      error, also set what appears to be (and may actually be) a
      global variable called errno,
      which has type int, and holds
      an error code. A correct declaration for errno
      is available in <errno.h>. To use it
      properly, you need to adopt the following idiom:
errno = 0; double result = atan2(y, x); if (errno) { /* Handle error. */ }
atan2 and other functions
        in <math.h>, but there are
        plenty of cases where a difinitive return code tells you
        there's an error.]
      errno
      is not set if there is no error, and might not be set even if
      there is! (math_ might be
      able to tell you more.) A number of error codes are defined,
      but zero is never one of them, so this is a safe default. The
      standard defines a small number of codes, like EDOM and ERANGE, but implementations may
      define many more, all with names beginning with E. The standard error codes are:
Macros with names matching ^E[0-9A-Z] might be added to <errno.h>.
errno_t is an
      optional type
      alias for int, and is
      used in the return types of some functions, to document that
      error codes are returned, rather than setting the global
      errno.
      __STDC_
      can be used to determine the existence of errno_t.
errno_t
        are specified as simply returning non-zero on error, not
        requiring it to be one of the E-prefixed
        codes. So the analogy with errno
        might not be generally correct.]
      Several functions are available to convert an error code into a locale-specific string:
#include <string.h>
char *strerror(int errnum);
      #define __STDC_WANT_ 1 #includeLIB_ EXT1__ <string.h>errno_t strerror_s(char *s, rsize_t maxsize, errno_t errnum); size_t strerrorlen_s(errno_t errnum);
strerror
      takes an error code, and returns a pointer to a message
      describing the error, according to the
      LC_MESSAGES locale category. strerror_s
      generates the same message, but writes it into the array of
      at least maxsize bytes at s, returning zero if the array was big enough, or
      non-zero if not. Provided maxsize is
      not zero, a null-terminated string will always be written
      into the array, possibly truncated. 
      strerrorlen_s can be used to find out how big
      the array needs to be for a specific error code, not
      including the terminating null character.
#include <stdlib.h>
void perror(const char *s);
      perror reads
      the current value of errno,
      and writes to stderr the message that strerror
      would provide. The null-terminated string s also forms part of the message (e.g., perror("Computing
      angle") could write Computing angle: Domain
      error), if not null or zero-length.
