From 754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 7 Apr 2024 13:41:34 -0500 Subject: new repository --- devdocs/c/error%2Ferrno.html | 78 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 devdocs/c/error%2Ferrno.html (limited to 'devdocs/c/error%2Ferrno.html') diff --git a/devdocs/c/error%2Ferrno.html b/devdocs/c/error%2Ferrno.html new file mode 100644 index 00000000..687e991b --- /dev/null +++ b/devdocs/c/error%2Ferrno.html @@ -0,0 +1,78 @@ +

errno

Defined in header <errno.h>
#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).

+

Example

#include <stdio.h>
+#include <math.h>
+#include <errno.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;
+    1.0/0.0;
+    show_errno();
+ 
+    errno = 0;
+    acos(+1.1);
+    show_errno();
+ 
+    errno = 0;
+    log(0.0);
+    show_errno();
+ 
+    errno = 0;
+    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

References

See also

+ + + + +
macros for standard POSIX-compatible error conditions
(macro constant)
displays a character string corresponding of the current error to stderr
(function)
+
(C11)(C11)
returns a text version of a given error code
(function)
+
(C99)(C99)(C99)
defines the error handling mechanism used by the common mathematical functions
(macro constant)
C++ documentation for errno
+

+ © cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
+ https://en.cppreference.com/w/c/error/errno +

+
-- cgit v1.2.3