IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Gerer les erreurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut Gerer les erreurs
    hello !

    j'ai voulu rajouter dans mon programme un moyen de gerer les erreurs de saisie.

    j'ai donc créé une variable error.
    je me demandais donc, s'il vallait mieux la declarer à l'exterieure de mes fonctions pour que toutes les fonction puisse y avoir acces, ou s'il fallais mieux la declarer dans le main, et la passer en argument de toutes mes fonctions...

  2. #2
    Membre très actif
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Par défaut
    En général, évite les variables globales. Il vaut mieux que tu la passe en argument.

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Pour cela, tu peux utiliser la variable externe : errno (de type int) qui est définit dans errno.h.

    Il a des codes d'erreurs déjà définis : ENOMEM (tentative de création de processus de taille trop importante), ERANGE (résultat d'une opération de maths non représentable)...

    EDIT Mais si tu veux faire simple, suit le conseil d'emmanuel

  4. #4
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    genial, merci !

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Ce que je fait souvent dans le cas de modules assez conséquents et réutilisables, je créé une liste de constantes avec enum (un typedef même sur cette liste) style (remplacer le mymodule par le nom du module) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef enum
    {
       MYMODULE_ALLOC_ERR,
       ...
       NB_ERR
    }
    e_mymodule_err;
    Puis je passe en paramètre de toutes les fonctions de ce module (si elles peuvent générer des erreurs) l'adresse d'une variable du type de l'énumération soit e_mymodule_err

    Donc voilà, je ne fait pas retourner d'erreurs depuis les fonctions (sauf bien sûr dans le cas où elles retournent déjà quelque chose, rien n'empêche de tester le retour) mais en cas d'erreurs dans une fonction je rempli alors la variable passée en paramètre et je la test à la sortie des fonctions pour déterminer s'il y'a eu une erreur et laquelle (suivant la valeur de la varaible d'après les constantes).

    C'est simple et assez propre je trouve.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Sinon tu peux mettre en place un système d'exception (comme en C++).
    Voici quelques exemples d'implémentation :
    http://dept-info.labri.fr/~achille/divers/
    http://ldeniau.web.cern.ch/ldeniau/h...exception.html


  7. #7
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    oki, merci, je vais voir laquelle de ces solutions est la plus adaptée à mon programme...

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kamouminator
    j'ai voulu rajouter dans mon programme un moyen de gerer les erreures de saisie.

    j'ai donc créé une variable error.
    je me demandais donc, s'il vallait mieux la declarer à l'exterieure de mes fonctions pour que toutes les fonction puisse y avoir acces, ou s'il fallais mieux la declarer dans le main, et la passer en argument de toutes mes fonctions...
    1 - On évite les globales.

    2 - Le principe général de conception d'une fonction, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type-retourne nom-de-la-fonction (liste-des-parametres)
    Avec la valeur retournée qui vaut 0 en cas de succès ou autre chose en cas d'échec.

    3 - On peut aussi passer l'adresse d'une variable d'erreur. C'est moins pratique, mais parfois, la valeur retournée est 'prise' par autre chose.

    4 - Il existe des méthodes plus sophistiquées quand on met en oeuvre les ADT. Mais c'est peut être un peu tôt pour en parler...

Discussions similaires

  1. [VBA] Gérer les erreurs d'insertion dans la base de données
    Par robert_trudel dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/12/2006, 12h45
  2. [C#] Comment gérer les erreurs SQL ?
    Par dcollart dans le forum Accès aux données
    Réponses: 1
    Dernier message: 20/06/2006, 13h01
  3. [LG] Gérer les erreurs de frappe
    Par newdelirium dans le forum Langage
    Réponses: 6
    Dernier message: 18/02/2006, 17h55
  4. [SAX] Comment gerer les erreurs soulevés par sax
    Par tipaquo dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 03/07/2005, 12h00
  5. [Htaccess] Gérer les erreurs HTTP du type 404...
    Par Marshall_Mathers dans le forum Apache
    Réponses: 4
    Dernier message: 01/07/2004, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo