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 : 34
    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...

  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 369
    Points
    50 369
    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)

  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.

  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.

  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 369
    Points
    50 369
    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.

  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.

  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 : 50
    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.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 590
    Points
    41 590
    Par défaut
    En C, j'explicite systématiquement le void.
    En C++, j'ai tendance à le faire aussi, par habitude.

  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

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 923
    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 923
    Points : 220 590
    Points
    220 590
    Billets dans le blog
    128
    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++).

  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 : 39
    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 : 47
    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

  14. #14
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    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.

  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

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