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?
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?
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.
cela fonctionne sur Windows ... parce que j'ai trouvé sur le Web que cela fonctionne uniquement sur unix –
@CAD_coding voir ici: http://msdn.microsoft.com/en-us/library/zc53h9bh.aspx –
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. –
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