Стандарт говорит об этом errno
:
Значение errno равно нулю при запуске программы, но никогда не устанавливается в ноль какой-либо библиотекой
функция. Значение errno может быть установлено на ненулевое значение при вызове библиотечной функции независимо от того, есть ли ошибка, при условии, что использование errno не задокументировано в описании функции в этом международном стандарте.
Что говорит мне, что любая библиотечная функция может вращаться с errno
любым удобным для нее способом, кроме:
- он не может установить
errno
на 0
- он не может делать то, что ему нравится, если в стандарте прямо указано иное
Обратите внимание, что стандарт предлагает следующее в сноске:
Таким образом, программа, использующая errno
для проверки ошибок, должна установить ее на ноль перед вызовом библиотечной функции, а затем проверить ее перед последующим вызовом библиотечной функции. Конечно, библиотечная функция может сохранить значение errno
на входе и затем установить его на ноль, если исходное значение восстанавливается, если значение errno
все еще равно нулю непосредственно перед возвратом.
Как отмечалось в других ответах, для функций, которые не в стандарте, обычно также устанавливается errno
.