errno の値を設定するかどうか規定されていないライブラリ関数 C 言語規格では、一部の関数について errno をどう扱うかを規定していない。例えば、setlocale() 関数はエラー発生時に null ポインタを返すが、errno を設定する保証はない。 これらの関数を呼び出した後、errno の値のみに依存してエラーの発生を判断してはならない。関数は errno の値を変更したかもしれないが、errno がエラーの状態を適切に示しているという保証はない。 他の規格で動作が規定されているライブラリ関数 一部の関数は、他の規格で errno の扱いに関して異なる挙動が規定されている。一例として fopen() がある。fopen() はエラーに遭遇すると null ポインタを返すが、このときの errno の扱いについて C 言語規格では何も言及していない。しかし POSIX.1 で
![ERR30-C. 関数を呼び出す前に errno をゼロに初期化し、関数の異常終了時にのみ errno を参照する](https://cdn-ak-scissors.b.st-hatena.com/image/square/7dd958779816f7e1a8006230cb8f8f321ee39ab8/height=288;version=1;width=512/https%3A%2F%2Fwww.jpcert.or.jp%2Fcommon%2Fimage%2Fogp_image.jpg)