J'ai deux appels à deux méthodes différentes:
void func1()
{
// do something
if (fail)
{
// then set errno to EEXIST
}
}
Et la deuxième méthode:
void func2()
{
// do something
if (fail)
{
// then set errno to ENOENT
}
}
Lorsque je donne à errno
une valeur, que fait-il? juste une vérification d'erreur?
Comment puis-je définir errno
dans les méthodes ci-dessus func1
et func2
à EEXIST
et ENOENT
Merci
À toutes fins pratiques, vous pouvez traiter errno
comme une variable globale (bien que ce ne soit généralement pas le cas). Incluez donc errno.h
et il suffit de l'utiliser:
errno = ENOENT;
Vous devriez vous demander si errno
est le meilleur mécanisme de rapport d'erreurs pour vos besoins. Les fonctions peuvent-elles être conçues pour renvoyer le code d'erreur elles-mêmes?
IMO, la norme errno
conçue pour le niveau système. Mon expérience est de ne pas les polluer. Si vous souhaitez simuler le mécanisme C standard errno
, vous pouvez faire une définition comme:
/* your_errno.c */
__thread int g_your_error_code;
/* your_errno.h */
extern __thread int g_your_error_code
#define set_your_errno(err) (g_your_error_code = (err))
#define your_errno (g_your_error_code)
et vous pouvez également implémenter your_perror(err_code)
. Pour plus d'informations, reportez-vous à l'implémentation de glibc.
#include <errno.h>
void func1()
{
// do something
if (fail)
{
errno = ENOENT;
}
}