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 :

Débat: Expliciter le type void comme parametre de fonction ?


Sujet :

C++

  1. #1
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut Débat: Expliciter le type void comme parametre de fonction ?
    Cette intervention a eu lieu à une réponse faite à la question valeur de retour par reference et dont voici l'origine
    Citation Envoyé par ram-0000 Voir le message
    En fait, la question est que doit faire la fonction sym()

    En regardant ton code, la réponse est : elle retourne un objet symétrique de l'instance de la classe courante.

    donc la fonction est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                  point sym()
                  {
                      point res;
                      res.x=-x;
                      res.y=-y;
                      return res;
                  }
    Il faudrait jouer aussi avec les const qualifier.

    comme sym() ne modifie pas la classe courante, il peut devenir :
    et c'est pareil pour affiche(). Avec les const, le compilateur peut faire plus de controle et t'aider à détecter plus vite les bugs

    PS : j'aime pas l'écriture fonction(), je préfère fonction(void) mais il parait que c'est pareil ...
    Ah bas tiens, un défenseur du void, pourquoi t'aime pas nu? personnellement au contraire je trouve ça plus lisible et plus clair (et aussi moins long) :

    foo()

    que

    foo(void)


    Mais bon comme tu l'as dis ça change rien c'est juste une écriture donc...
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Goten Voir le message
    Ah bas tiens, un défenseur du void, pourquoi t'aime pas nu?
    Probablement un héritage du C ancien dans lequel un prototype function() permettait d'appeler la fonction avec ce qu'on voulait comme paramètres. Je suis d'accord, cela n'existe plus maintenant mais les habitudes ont la vie dure.

    et puis fonction(void) c'est explicite et j'aime bien le explicite (mais les gouts et les couleurs, cela ne se discute pas)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    PS : j'aime pas l'écriture fonction(), je préfère fonction(void) mais il parait que c'est pareil ...
    En C++ c'est pareil, en C pas tout à fait. La forme avec void n'est présente en C++ que par compatibilité avec le C.
    Citation Envoyé par Bjarne Stroustrup
    I abandoned the use of void as an argument type meaning "no arguments" after Dennis Ritchie and Doug McIlroy strongly condemned it as "an abomination." Instead, I adopted the obvious notation for taking no arguments, an empty pair of parentheses.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #4
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Goten Voir le message
    D'autre part : En C le passage de ce qu'on veut '' en argument c'est pas :
    foo(...) ?
    En C

    C'est un passage d'un nombre variable de paramètres (et il faut au moins un paramètre nommé avant -- au moins pour que ce soit utile, je ne sais pas si c'est strictement nécessaire ou pas).

    déclare f comme ayant un nombre non spécifié de paramètres, mais c'est un comportement indéfini de l'appeler avec un nombre de paramètre différent ou des paramètres de types différents (hors promotion) que ceux utilisés pour la définition.

    déclare f comme ayant un nombre non spécifié de paramètres mais la défini comme n'ayant pas de paramètres.

    déclare et défini f sans paramètres.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Goten Voir le message
    D'autre part : En C le passage de ce qu'on veut '' en argument c'est pas :
    foo(...) ?
    Tout à fait mais je ne parlais pas de cela.

    Dans un ancien temps en C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* prototype */
    int foo();
     
    int main()
    {
       foo();
       foo("test");
       foo('t');
       foo(12);
       foo(12, 'h', "autre test");
    }
    Cela ne génèrait aucune erreur de compilation car le compilateur ne SAVAIT pas les paramètres attendus par la fonction donc tout était correct.

    alors qu'avec un prototype int foo(void), il n'y avait plus d'ambiguïté, et le compilateur pouvait générer sa litanie de warning avec a propos.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par ram-0000 Voir le message

    Dans un ancien temps en C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* prototype */
    int foo();
     
    int main()
    {
       foo();
       foo("test");
       foo('t');
       foo(12);
       foo(12, 'h', "autre test");
    }
    Cela ne génèrait aucune erreur de compilation
    En C, ça ne génère toujours pas d'erreur de compilation.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    En C

    C'est un passage d'un nombre variable de paramètres (et il faut au moins un paramètre nommé avant -- au moins pour que ce soit utile, je ne sais pas si c'est strictement nécessaire ou pas).
    Je n'ai pas regardé la norme, mais j'ai simplement compilé un prog C avec MinGW et les options de warning strict ISO. Et j'ai bien l'erreur
    ISO C requires a named argument before '...'
    Donc il semblerait que ce soit strictement nécessaire.

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Pour ma part, j'ai également tendance à expliciter le "void" pour une fonction sans arguments, de façon justement à bien marquer qu'il n'y en a pas, que c'est volontaire et que non, je n'ai pas confondu déclaration et appel de fonction, ni oublié de mettre les arguments.

    Pour les arguments variables, ça ne marche en effet que s'il y a au moins un argument fixe, la chaîne de formatage pour printf par exemple, car les macros de traitement des arguments variables requièrent justement le nom du "dernier" paramètre fixe comme base de départ : cf. va_arg.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    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 518
    Points
    41 518
    Par défaut
    En C, j'explicite systématiquement le void.
    En C++, j'ai tendance à le faire aussi, par habitude.
    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.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 193
    Points
    193
    Par défaut
    Hello,

    Tiens, c'est le genre de truc qu'on utilise tout le temps, et je me suis jamais posé la question ... !

    Pour ma part, je trouve le foo() plus simple, plus rapide, et tout aussi facile a comprendre, pourtant, je viens du C. t'facon, on le dira jamais assez, les développeurs, c'est des feignasses (joke inside ... pas taper !!)

    Je pense que c''est surtout une question de gout en C++.

    Cordialement,
    PKO
    Quand c'est trop, c'est pas bon !

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 287
    Points
    218 287
    Billets dans le blog
    117
    Par défaut
    Bonjour,

    J'avais lu une feuille sur laquelle, on disait qu'il était préférable d'expliciter le 'void'
    Si je me rapelle bien c'était que d'une part, c'est mieux pour la relecture du code et d'une autre part, ça ferait un peu moins travailler le compilo ... ( je dis peut être une connerie )
    Finalement, dès que j'y pense, je fous le 'void' maintenant (C et C++).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  12. #12
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Moi je n'ai que survolé le C avant d'apprendre très vite le C++ et on m'a donné pour habitude de ne pas expliciter le void. En C++ il y aura quand même des erreurs en cas d'appel de fonction avec des arguments non ?
    Si c'est juste pour la forme je trouve ça beaucoup plus lisible de ne pas mettre le void, quand y'a rien ...y'a rien :)

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 168
    Points
    168
    Par défaut
    Salut

    J'avais déjà eu une réflexion sur ce sujet :
    voir ce thread pour plus d'infos.
    --
    Jérémie
    Jérémie

  14. #14
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Ah bas justement james kanze explicite exactement ce que je pense de l'écriture void :


    Écrire qu'une fonction a un paramètre, alors qu'il n'en a pas,
    améliore la lisibilité ? Il y a quelque chose que je ne
    comprends pas.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par Goten Voir le message
    Ah bas justement james kanze explicite exactement ce que je pense de l'écriture void :
    Ca se tient ... et ca ne fait que favoriser ma methode actuelle.
    Pour la peine, je changerai pas
    Quand c'est trop, c'est pas bon !

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/07/2014, 18h39
  2. Réponses: 9
    Dernier message: 10/05/2010, 22h35
  3. cast explicite requis pour type void **
    Par ram-0000 dans le forum C++
    Réponses: 2
    Dernier message: 30/04/2008, 18h47
  4. Type void * ... petite question !
    Par Franck.H dans le forum C
    Réponses: 29
    Dernier message: 28/03/2005, 14h38
  5. type void* dans une structure
    Par barbapapaz dans le forum C
    Réponses: 3
    Dernier message: 16/07/2004, 17h11

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