macro
errno
<cerrno>
Last error number
This macro expands to a modifiable
lvalue of type
int, therefore it can be both read and modified by a program.
errno is set to zero at program startup, and almost any function of the standard C library can modify its value to some value different from zero, generally to signal specific categories of error (no library function sets its value back to zero once changed).
A program can also modify its value. In fact, if this variable is intended to be used for error checking after a library function call, it should be reset by the program to zero before the call (since any previous call to a library function may have altered its value).
The same header that declares
errno (
<cerrno>) also declares at least the following two macro constants with values different from zero:
macro | meaning when errno is set to this |
EDOM | Domain error: Some mathematical functions are only defined for certain real values, which is called its domain, for example the square root function is only defined for non-negative numbers, therefore the sqrt function sets errno to EDOM if called with a negative argument. |
ERANGE | Range error: The range of values that can be represented with a variable is limited. For example, mathematical functions such as pow can easily outbound the range representable by a floating point variable, or functions such as strtod can encounter sequences of digits longer than the range representable by an int value. In these cases, errno is set to ERANGE. |
The standard library may set many more values to
errno. But particular library implementations are free to choose whether to make these values available as macro constants and with which names.
The particular error messages associated with values of
errno can be obtained using
strerror or directly printed using function
perror.
In C++,
errno is always declared as a macro, but in C it may also be implemented as an
int object with external linkage.