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 :

[Question] Argument anonyme - Utilité ?


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 40
    Points : 46
    Points
    46
    Par défaut [Question] Argument anonyme - Utilité ?
    Bonjour à tous, je me pose une question :
    A quoi servent les fonctions avec des arguments sans nom svp ?

    void fonction (int) {...} ---> Ne génère pas d'erreur
    Comment se sert-on de l'argument s'il n'a pas de nom ?
    Si on ne sait pas s'en servir, quelle est son utilité svp ?

  2. #2
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Salut,

    Effectivement ça peut sembler étrange, parmi une des utilisations que je connaisse est lorsque tu fais de l'overload et que le type est l'information utile et ne contient pas de donnée (notamment avec une technique appelée "tag dispatching"). Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct square_tag;
    struct absolute_tag;
    int math(int v, square_tag) { return v * v; }
    int math(int v, absolute_tag) { return v >= 0 ? v : -v; }
    Après c'est des techniques un peu avancées et si tu es débutant tu devrais juste te contenter de savoir que ça existe et il y aura peut-être une situation, un jour, où ça te permettra de coder une solution élégante ;-)

  3. #3
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Bonjour.

    Ça peut servir lors de la déclaration d'une fonction, quand on ne veux pas nommer les paramètres si ils sont suffisamment explicite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int somme(int, int); //pas besoin de nommer les variables dans la déclaration
    int somme(int a, int b) //par contre à la définition, il faut les nommer
    {
        return a+b;
    }
    Il me semble que ça peut aussi servir à supprimer l’avertissement « variable non utilisée » du compilateur. Typiquement int main(int argc, char *argv[]) générerait un warning si on utilise pas argc ou argv mais je n'en suis pas certain.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 40
    Points : 46
    Points
    46
    Par défaut
    Merci les amis
    @manudiclemente : Oui je m'en suis déjà servi de cette technique, c'était la seule utilité que j'y voyais jusqu'au jour où mon compilateur ne m'a pas donné de coup de boule lorsque je n'ai pas nommé mes arguments à l'implémentation de la fonction ^^

    @Trademark : J'suis encore débutant; je n'ai qu'un an d'expérience en C++ et je n'ai pour l'instant encore jamais eu affaire à cette sittuation ^^ je ne sais même pas ce que signifie "tag dispatching" !

  5. #5
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par manudiclemente Voir le message
    Il me semble que ça peut aussi servir à supprimer l’avertissement « variable non utilisée » du compilateur. Typiquement int main(int argc, char *argv[]) générerait un warning si on utilise pas argc ou argv mais je n'en suis pas certain.
    C'est effectivement l’intérêt principal.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main(int, char**) { }
     
    // au lieu de
    int main(int argc, char** argv) {
       (void)argc;
       (void)argv;
    }
    (Pour main peut d'intérêt, on peut omettre les arguments, mais pour d'autres fonctions c'est utile, comme l'exemple de @Trademark).

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 928
    Points
    928
    Par défaut
    Je n'ai jamais vu un compilo produire une erreur parce qu'un argument d'une fonction n'est pas utilisé. En gros l'intérêt est quand la signature de ta fonction t'es imposée, soit parce que c'est une "convention" (main, mais aussi operator++ qui prend un argument de type int pour différencier l'opérateur prefixe du postfixe), ou parce que tu herites d'une classe et redefini une methode, ou parce que ta fonction doit etre passé en callback d'une autre, etc.

    Ceci étant, a part pour le tag dispatching et pour l'opérateur ++, je donnerais toujours un nom aux variables. C'est plus cohérent.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par TropMDR Voir le message
    Je n'ai jamais vu un compilo produire une erreur parce qu'un argument d'une fonction n'est pas utilisé.
    C'est pourtant un warning classique http://msdn.microsoft.com/en-US/en-e.../26kb9fy0.aspx
    Dans la plupart des boites on active le "traiter les warning comme erreur", donc c'est loin d'être gadget.

    Comment se sert-on de l'argument s'il n'a pas de nom ?
    On s'en sert pas
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. question sur l'utilité d'une macro
    Par skeleton18 dans le forum C++
    Réponses: 9
    Dernier message: 10/06/2011, 13h34
  2. Question sur l'utilité sur EnableEventValidation
    Par ouadie99 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 12/11/2008, 13h01
  3. Réponses: 30
    Dernier message: 27/03/2008, 15h02
  4. Réponses: 36
    Dernier message: 28/09/2007, 18h23
  5. Réponses: 9
    Dernier message: 29/07/2003, 14h41

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