macro

errno

<cerrno>
int
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:

macromeaning when errno is set to this
EDOMDomain 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.
ERANGERange 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.