errno, _doserrno, _sys_errlist e _sys_nerr

Macros globais que mantêm códigos de erro definidos durante a execução do programa e equivalentes da cadeia de caracteres dos códigos de erro para exibição.

Sintaxe

#define errno   (*_errno())
#define _doserrno   (*__doserrno())
#define _sys_errlist (__sys_errlist())
#define _sys_nerr (*__sys_nerr())

Comentários

errno e _doserrno são definidos como 0 no runtime durante a inicialização do programa. errno é definido em um erro em uma chamada do sistema. Como errno contém o valor da última chamada que o define, esse valor pode ser alterado pelas chamadas subsequentes. As chamadas de biblioteca de tempo de execução definidas errno em um erro não são limpas errno com êxito. Sempre desmarque errno chamando _set_errno(0) pouco antes de uma chamada que pode defini-lo e marque-o imediatamente depois da chamada.

Em um erro, errno não é necessariamente definido como o mesmo valor que o código de erro retornado por uma chamada do sistema. No caso de operações de E/S, _doserrno armazena os equivalentes de código de erro do sistema operacional dos códigos errno. Para a maioria das operações que não são de E/S, o valor de _doserrno não está definido.

Cada valor errno é associado a uma mensagem de erro em _sys_errlist, que pode ser impressa usando uma das funções perror, ou armazenada em uma cadeia de caracteres com uma das funções strerror ou strerror_s. As funções perror e strerror usam a matriz _sys_errlist e _sys_nerr, o número de elementos em _sys_errlist, para processar informações de erro. O acesso direto a _sys_errlist e _sys_nerr é removido por motivos de segurança do código. Recomendamos que você use as versões funcionais, mais seguras, em vez das macros globais, como mostrado aqui:

Macro global Equivalentes funcionais
_doserrno _get_doserrno, _set_doserrno
errno _get_errno, _set_errno
_sys_errlist, _sys_nerr strerror_s, _strerror_s, _wcserror_s, __wcserror_s

As rotinas matemáticas da biblioteca definem errno chamando _matherr. Para tratar erros de matemática de maneira diferente, grave sua própria rotina de acordo com a descrição da referência de _matherr e denomine-a _matherr.

Todos os valores errno são constantes predefinidas em <errno.h>, e compatíveis com UNIX. Somente ERANGE, EILSEQ e EDOM são especificadas no padrão ISO C99. Para obter uma lista completa, consulte errno constantes.

Requisitos

Macro global Cabeçalho necessário Cabeçalho opcional
errno <errno.h> ou <stdlib.h>, <cerrno> ou <cstdlib> (C++)
_doserrno, _sys_errlist, _sys_nerr <stdlib.h>, <cstdlib> (C++) <errno.h>, <cerrno> (C++)

As macros _doserrno, _sys_errlist e _sys_nerr são extensões da Microsoft. Para obter informações sobre compatibilidade, consulte Compatibilidade.

Confira também

Variáveis globais
errno Constantes
perror, _wperror
strerror, _strerror, _wcserror, __wcserror
strerror_s, _strerror_s, _wcserror_s, __wcserror_s
_get_doserrno
_set_doserrno
_get_errno
_set_errno