ヘッダーerrno.hでは、errnoと呼ばれる静的な場所に格納されるエラーコードによってエラー状態を報告するマクロを定義しています。
特定のライブラリ関数がエラーを検出すると、errnoに値が格納されます。プログラム起動時に格納される値はゼロです。
ライブラリ関数は、ゼロより大きい値のみを格納します。
どのライブラリ関数も、エラーを検出したかどうかにかかわらず、戻り値を返す前に格納された値を変更することができます。
ほとんどの関数は、エラーを検出したことを示す特別な値を返します。
一般的に、ポインタを返す関数はNULL、整数を返す関数は-1です。
関数の中には、エラーが検出されたかどうかを後でテストするために、呼び出し側がerrnoを0に設定することを要求するものもあります。
errnoマクロは、int型のl値に展開され、 errno機能を使用する関数で生成された最後のエラーコードを含みます。
旧来、これは静的なメモリ位置でしたが、今日ではマルチスレッドを可能にするために、ほとんどの場合マクロが使用され、各スレッドは独自のエラー番号を見ることになります。
また、ヘッダーには、エラーコードを表す整数定数に展開するマクロが定義されています。C規格では3つしか定義されていません。
EDOM
ERANGE
EILSEQ
Eと数字、またはEと大文字で始まる追加のマクロ定義も、実装によって指定できます。
UNIXやLinuxのようなPOSIX準拠のオペレーティングシステムには、他にも多くのエラー値が含まれており、その多くは上記のエラー値よりもはるかに頻繁に使用されています。例えば、ファイルを読み取るために開くことができない場合のEACCESなどです。