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 :

Petite question de bonne pratique pour débutant :)


Sujet :

C

  1. #1
    Membre régulier Avatar de nabodix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 93
    Points : 115
    Points
    115
    Par défaut Petite question de bonne pratique pour débutant :)
    bonjour

    Je suis débutant en C; j'ai un petit travail à remettre, et je me demandais comment l'écrire le plus proprement possible...


    Voici une version (très) épuré/simplifié de mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int main(int argc, char *argv[]){
        ...
        flux(argv[1],argv[2]);
        ...
    }
     
    /*
     *méthode qui écrira "nbr" caractères au hasard dans le fichier "fichier"
     */
    int flux(char *nbr,char *fichier){
        ...
    }
    mon problème est le suivant: où vérifier:
    1) le nombre d'arguments de main (je suppose comme première instruction du main, mais vaut mieux un exit(-1) ou un return -1 ?)
    2) que argv[1] est convertissable en entier (je peux bien entendu changer la signature de flux)
    3) que argv[2] a pu être ouvert (dans la méthode flux je suppose, mais vaut mieux faire un exit(-1) ou un return -1 pour gérer l'erreur dans le main?)

    Vu que j'ai plusieurs type d'erreurs possibles, vaut mieux avoir des codes différents pour chaque erreurs?

    Merci beaucoup pour votre attention/conseils !

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    1. Tester au début du main, et retourner EXIT_FAILURE (pas -1) avec un bon vieux return.
    2. Si c'est un prérequis pour ton programme, tu testes ça dans le main aussi. D'ailleurs, je te conseille de passer directement un entier à la fonction flux(), plutôt qu'une chaîne.
    3. Utiliser un return autant que possible. N'utilise exit() que si tu n'arrives absolument pas à faire autrement.

    En effet, utiliser plusieurs codes d'erreurs différents peut être intéressant. Attention toutefois, bien que ce soit accepté par DOS, Windows et les unixoïdes, ça n'est pas strictement standard (le standard n'accepte que 0, EXIT_SUCCESS, et EXIT_FAILURE).


    PS: Le second paramètre de flux() devrait être un char const * si tu ne trafiques pas le nom de fichier.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre régulier Avatar de nabodix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 93
    Points : 115
    Points
    115
    Par défaut
    Merci bcp Médinoc!

    Donc il vaut mieux que je mette un "return EXIT_FAILURE;" (si il n'arrive pas à ouvrir le fichier par exemple) dans ma méthode flux() et dans un autre "return EXIT_FAILURE;" dans mon main si la méthode flux() ne s'est pas bien déroulé?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En fait, je serais du genre à limiter le return EXIT_FAILURE au main(), et retourner -1 dans les sous-fonctions.

    Ce qui donnerait un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    int main(int argc, char *argv[]){
        ...
        if(argc < 3) {
            ...
            return EXIT_FAILURE;
        }
     
        int nbr = ...
        if(flux(nbr, argv[2]) < 0) {
            return EXIT_FAILURE;
        }
        ...
        return EXIT_SUCCESS;
    }
     
    /*
     *méthode qui écrira "nbr" caractères au hasard dans le fichier "fichier"
     */
    int flux(int nbr, char const *fichier){
        ...
        if( erreur ) {
            return -1;
        }
        return 0;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre régulier Avatar de nabodix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 93
    Points : 115
    Points
    115
    Par défaut
    Merci, je m'en vais suivre tes conseils

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] Sessions - bonnes pratiques pour un débutant
    Par totale_eclipse dans le forum Langage
    Réponses: 11
    Dernier message: 12/07/2011, 00h27
  2. [1.x] Question de bonnes pratiques : plusieurs petits modules
    Par AoSiX dans le forum Symfony
    Réponses: 8
    Dernier message: 04/05/2010, 21h16
  3. Réponses: 5
    Dernier message: 12/09/2006, 18h06
  4. Tutoriel SEO : Introduction et bonnes pratiques pour l'optimisation de pages Web
    Par Community Management dans le forum Référencement
    Réponses: 0
    Dernier message: 06/07/2006, 00h03
  5. Petites questions en vrac d'un débutant.
    Par kriskikout dans le forum Langage
    Réponses: 6
    Dernier message: 08/06/2006, 14h54

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