#define errno /* implementation-defined */
errno
is a preprocessor macro (but see note below) that expands to a thread-local(since C11) modifiable lvalue of type int. Several standard library functions indicate errors by writing positive integers to errno
. Typically, the value of errno
is set to one of the error codes listed in <errno.h> as macro constants beginning with the letter E
followed by uppercase letters or digits.
The value of errno
is â0â at program startup, and although library functions are allowed to write positive integers to errno
whether or not an error occurred, library functions never store â0â in errno
.
Library functions perror and strerror can be used to obtain textual descriptions of the error conditions that correspond to the current errno
value.
Note: Until C11, the C standards had contradictory requirements, in that they said that errno
is a macro but also that "it is unspecified whether errno
is a macro or an identifier declared with external linkage". C11 fixes this, requiring that it be defined as a macro (see also WG14 N1338).
#include <errno.h> #include <math.h> #include <stdio.h> void show_errno(void) { const char *err_info = "unknown error"; switch (errno) { case EDOM: err_info = "domain error"; break; case EILSEQ: err_info = "illegal sequence"; break; case ERANGE: err_info = "pole or range error"; break; case 0: err_info = "no error"; } fputs(err_info, stdout); puts(" occurred"); } int main(void) { fputs("MATH_ERRNO is ", stdout); puts(math_errhandling & MATH_ERRNO ? "set" : "not set"); errno = 0; (void)(1.0 / 0.0); show_errno(); errno = 0; (void)acos(+1.1); show_errno(); errno = 0; (void)log(0.0); show_errno(); errno = 0; (void)sin(0.0); show_errno(); }
Possible output:
MATH_ERRNO is set no error occurred domain error occurred pole or range error occurred no error occurred[edit] References
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4