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 :

Analyser les paramètres passés à un programme


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut Analyser les paramètres passés à un programme
    Bonjour,
    La question n'est pas « Comment analyser les paramètres », mais plutôt « De quelle manière le faire ».

    Comment ça c'est pareil ???
    Bon, je vais préciser...
    « De quelle manière analyser les paramètres passés à un programme pour respecter une approche C++ correcte ? »

    Voilà ce que je fais d'habitude :
    Code Analyse de paramètres : 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
    struct parametres
    {
     
        /**
         * @brief Analyse les paramètres d'un programme.
         * @param argc nombre de paramètres du programme (y compris argv[0]).
         * @param argv liste des paramètres du programme (y compris argv[0]).
         * @return @c true si la lecture des arguments permet l'exécution du programme,
         *         @c false sinon.
         * 
         * @note Si l'un des paramètres demande l'affichage de l'aide, le programme
         *       s'arrêtera immédiatement après avec le code de sortie EXIT_SUCCESS.
         */
        bool operator () (int argc, char **argv);
     
      private:
        /**
         * @brief Affiche un message d'aide et quitte.
         * @param prog nom du programme (argv[0]).
         * 
         * @note Cette fonction appelle std::exit(EXIT_SUCCESS).
         */
        void aide(char const *prog);
     
    }; // struct parametres
    En fonction du programme, la classe contient également des variables membres pour représentsr les paramètres, et les accesseurs (constants) qui vont avec.

    Pour ceux qui se demandent pourquoi je retourne un booléen, disons que j'ai été traumatisé par des appels à exit qui ne permettaient pas de libérer toutes les ressources (même statiques, si ma mémoire est bonne...).
    Je n'ai malheureusement pas d'exemple, et je ne me souviens même plus si c'était en C ou en C++.

    Bref, du coup je préfère sortir du programme directement dans le main à l'aide de l'instruction return, quand c'est possible.
    Évidemment, on pourrait très bien retourner le code de sortie (différent de EXIT_SUCCESS) à la place d'un booléen.

    Voilà...
    Toutes les remarques sont les bienvenues !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut !

    Perso, j'utilise boost::program_options. Ca fait le travail rapidement et bien. Ca présente l'inconvénient de n'être pas header only, mais moi ça ne me pose aucun problème.

  3. #3
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Hum... je l'avais oublié, celui-là...

    Je connaissais, mais dans le cas présent je me limite au cas où l'utilisateur ne peut ou ne veut pas installer boost (ou une autre bibliothèque).

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    L'utilisateur, ou le développeur ? Si tu link en statique, l'utilisateur n'aura rien à installer de plus que ton programme.

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par Steph_ng8 Voir le message
    Hum... je l'avais oublié, celui-là...

    Je connaissais, mais dans le cas présent je me limite au cas où l'utilisateur ne peut ou ne veut pas installer boost (ou une autre bibliothèque).
    Si tu crées un exécutable et non une bibliothèque, et que, au pire, tu linke en dynamique, qu'est ce qui t'empêche de rajouter la dll de boost éventuellement nécessaire à ton installateur
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    L'utilisateur, ou le développeur ?
    L'utilisateur.
    Ou pour être plus précis, celui qui doit recompiler les sources sur sa machine.

    Citation Envoyé par jblecanard Voir le message
    Si tu link en statique, l'utilisateur n'aura rien à installer de plus que ton programme.
    Citation Envoyé par koala01 Voir le message
    Si tu crées un exécutable et non une bibliothèque, et que, au pire, tu linke en dynamique, qu'est ce qui t'empêche de rajouter la dll de boost éventuellement nécessaire à ton installateur
    Je crée bien un exécutable, et mon installateur se résume à un Makefile.
    Quant à rajouter une DLL, je l'ai fait une fois (pour Qt), et elle était (beaucoup) plus lourde que programme.
    Je ne sais pas combien de modules doivent être chargés pour pouvoir utiliser boost::program_options, mais je me demande si cela vaut le coup d'ajouter une DLL lourde juste pour disposer d'un analyseur de paramètres.

    De plus, c'est vrai que je ne l'ai pas précisé, mais je travaille essentiellement sous Linux (même si j'aimerais que ce soit portable sur Windows et MAC OS).
    Alors pour les DLL on repassera...
    Quoique j'imagine que dans ce cas il y a des .so...

    Ceci dit, ce n'est pas vraiment le problème.
    Encore une fois, la question n'est pas « comment faire », mais « de quelle manière le faire pour que ce soit conceptuellement correct et cohérent », si possible en réduisant les dépendances extérieures aux minimum.
    Ce n'est pas une question de méthode, mais de design.

    Je sais pertinemment que boost est un outil puissant et qu'il le fera toujours mieux que moi.
    Mais dans l'immédiat, je n'ai pas besoin d'autant de puissance.

    Je comprendrais parfaitement que vous me trouviez borné, voire étroit d'esprit.
    Alors dites-vous que mon plus gros problème en C++ à l'heure actuelle se situe au niveau de la conception, et que le problème présent n'est qu'un exemple sur un cas précis.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Ben si le débat est sur le design d'un tel outil, pourquoi pas. Pour bien designer, il faut commencer par étudier le use case.

    Pour moi, le use case, c'est :
    - Déclaration des options possibles à l'outil.
    - Passage de argc et argv à l'outil pour interprétation
    - Lecture du résultat

    Je vois bien un système avec un map<string,string> pour stocker le résultat. On peut faire un proto assez simple.

Discussions similaires

  1. $_POST : supprimer les paramètres passés par l'url
    Par yosraisi dans le forum Langage
    Réponses: 4
    Dernier message: 21/04/2008, 12h19
  2. Récupérer les paramètres passés en commande
    Par zuzuu dans le forum Windows
    Réponses: 13
    Dernier message: 13/03/2008, 18h23
  3. Réponses: 11
    Dernier message: 06/09/2006, 12h48
  4. [C#] - Récupérer les paramètres passés à une application
    Par linuxludo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/11/2005, 14h41
  5. Réponses: 4
    Dernier message: 04/07/2003, 19h13

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