Errno : inclusion du header dans toutes les sources?

Fermé
Utilisateur anonyme - Modifié par orinym le 9/03/2014 à 11:21
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 9 mars 2014 à 14:38
Bonjour,

Je travaille sur un projet en C et j'aimerais gérer les erreurs avec la variable errno.
J'aimerais faire une unique fonction qui utiliserait strerror pour retourner le message d'erreur adéquat, j'aimerais mettre cette fonction dans une source distincte du reste.

Pour utiliser errno je dois inclure errno.h dans ladite source.

Seulement, quand je regarde le man d'une fonction telle que malloc, je peux lire ceci :
"If there is an error, they return a NULL pointer and set errno to ENOMEM."

Lorsque j'ai une erreur avec un malloc, la valeur ENOMEM est assignée à la variable errno. sans pour autant avoir besoin d'inclure errno.h.
Puis-je tout de même utiliser errno dans cette source?

Dois-je inclure errno.h uniquement dans la source où errno est utilisée, ou dans tous les fichiers où errno peut être modifiée avec une erreur?
Dois-je aussi aussi l'inclure dans toutes les sources où je pourrais avoir besoin de lui assigner arbitrairement une valeur?

Puis-je également créer dans le header de mon projet d'autres valeurs pour errno avec des defines afin d'afficher des messages d'erreur personnalisés? (en supposant cependant que les valeurs n'ont pas encore été assignées.)

Merci par avance pour votre aide. :)

Orinym.

RTFM!!!

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
9 mars 2014 à 14:38
Bonjour,

Pour utiliser errno je dois inclure errno.h dans ladite source.
Non pas forcément. Cela dépend comment on l'utilise. errno.h se contente de définir les constantes. Avec errno.h tu pourras utiliser par exemple ERANGE au lieu de 34 (c'est plus parlant quand même) :-).
Attention, errno.h ne définit pas beaucoup de constantes d'erreur standard.

Sinon, oui tu peux te rajouter des erreurs mais ce n'est pas très conseillé puisque ça sera plus dur de réutiliser. Autant te créer ta propre bibliothèque de gestion d'erreurs (journalisation, stacktrace, ...).

Sinon pour info, tu as aussi perror() qu'on utilise plus souvent que strerror().

Cdlt,
0