2012-05-29 2 views
1

Je tente désespérément de définir des codes d'erreur personnalisés en C (++). En ce qui concerne le projet sur lequel je travaille, il est interdit d'utiliser Exceptions and Signals et toute autre approche permettant d'allouer de la mémoire dynamique.Comment définir des codes d'erreur personnalisés en C (++)

J'ai utilisé les codes d'erreur standard pour certaines méthodes qui produisent des erreurs ressemblant à celles-ci mais pour certaines méthodes, les erreurs doivent être spécifiques pour être couvertes par les codes d'erreur standard fournis par le système d'exploitation.

J'ai également cherché les chaînes d'erreur dans mon système, mais je n'ai pas réussi à trouver les messages d'erreur O_O Où sont ceux définis de toute façon? Donc, je cherche une méthode qui me permet de définir un code d'erreur personnalisé (par exemple 666) et le message d'erreur correspondantig ("Satan a déclaré une erreur!") Qui sera produit en utilisant strerror. Est-ce possible ou dois-je me mêler de certains fichiers liés au système?

Dans mes meilleures salutations, ahnimuhs

+1

ces codes d'erreur doivent-ils être des codes d'erreur errno "standard"? Si non, pourquoi ne pas simplement définir et renvoyer vos propres codes d'erreur? – Brady

+1

La restriction de mémoire dynamique sans exclut les exceptions. À notre époque, à mon avis, il n'est pas logique de ne pas utiliser d'exceptions. –

Répondre

1

Certaines implémentations de strerror(3) permettent des codes d'erreur et des étiquettes définis par l'utilisateur. Vous devez fournir une fonction _user_strerror() et définir des codes d'erreur après __ELASTERROR.

+0

C'est intéressant, j'ai essayé de trouver une ressource pour cela mais je n'ai trouvé aucune information à part le lien que vous avez déjà écrit. – Ahnihmuhs

2

Si vous déclarez un ENUM comme un type, qui peut satisfaire le domaine où. Sûreté du typage se propage

Ensuite, vous pouvez offrir une fonction pour accéder à la description en tant que tampon char (donné un paramètre régional, le paramètre régional actuel?).

class t_mon_io_error { 
public: 
enum t_type { 
... 
    SatanDeclaredAnError = 666 
... 
}; 

static const char* Description(const t_type& pError) { 
    switch(pError) { 
... 
} 
Questions connexes