2011-10-26 2 views
8

Je ne comprends pas à quoi sert la bibliothèque errno en C++? Quels sont les types d'erreurs qui y sont définies et comment savoir quel numéro représente quelle erreur?Comment utiliser errno en C++

Cela affecte-t-il l'exécution du programme?

+0

Prenez n'importe quelle page de manuel et regardez la section 'Erreurs', par ex. http://linux.die.net/man/3/open. Toutes les macros 'E *' sont des valeurs que' errno' contiendra en cas d'erreur. – wormsparty

Répondre

9

errno.h fait partie du sous-ensemble C de C++. Il est utilisé par la bibliothèque C et contient des codes d'erreur. Si un appel à une fonction échoue, la variable "errno" est mise en correspondance avec l'erreur.

Cela ne sera d'aucune utilité si vous utilisez la bibliothèque standard C++.

En C, vous avez des fonctions qui traduisent des codes erronés en chaînes de caractères.

Par exemple en C, il fonctionne comme ceci:

int result = call_To_C_Library_Function_That_Fails(); 

if(result != 0) 
{ 
    char buffer[ 256 ]; 
    char * errorMessage = strerror_r(errno, buffer, 256); // get string message from errno 

    // ... 
} 

Vous pourriez en avoir besoin bien sûr en C++ lorsque vous utilisez la bibliothèque C ou votre bibliothèque OS qui est en C. Par exemple, si vous utilisez l'API sys/socket.h dans les systèmes Unix. Avec C++, si vous encapsulez un appel API C, vous pouvez utiliser vos propres exceptions C++ qui utiliseront errno.h pour obtenir le message correspondant de vos codes d'erreur d'appel API C.

+0

cela fonctionne sur Windows ... parce que j'ai trouvé sur le Web que cela fonctionne uniquement sur unix –

+1

@CAD_coding voir ici: http://msdn.microsoft.com/en-us/library/zc53h9bh.aspx –

+1

Presque correct, mais de nombreuses fonctions renvoient simplement une valeur unique (par exemple '-1') en cas d'erreur et définissent' errno' sur le code d'erreur réel. Donc vous voudriez 'strerror_r (errno, ...)' plutôt que 'strerror_r (errorCode, ...)'. 'errno' lui-même est une variable pseudo-globale bizarre. –