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 :

placement de l'étoile (*) dans les déclaration


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut placement de l'étoile (*) dans les déclaration
    Salut à tous,

    Je vois souvent des écritures de déclaration de pointeurs différentes. Un coup l'étoile ce place juste après le type du pointeur et un autre coup l'étoile ce place juste avant le nom du pointeur.

    Je n'arrive pas à comprendre la logique et surtout comment procédé.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char *p1 = strchr(str,'a');
     
    int* ptr = premiers;
    Vous voyez ce que je veux dire ?
    quel sont les règles d'écriture exactes des pointeurs ?



    Merci à vous

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    C'est la même chose. Les deux sont acceptés.
    Tu peux aussi écrire :
    ou encore si le cœur t'en dit.

  3. #3
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Bonjour.

    En C/C++, les espaces n'ont pour effet que de séparer des mots.... mais pas des caractères spéciaux, or le * est un caractère spécial donc comme l'a dit Arzar, c'est selon tes goûts.


    Personnellement, je préfère la syntaxe suivante: en effet, elle est moins trompeuse (à mon sens). Par exemple, si on déclare plusieurs variables sur la même ligne (ce qu'il ne faut pas faire, c'est mal, mais ça se trouve ) ici, ptr et ptr2 seront des pointeur mais var sera un int ! ce que n'est pas évident quand on écrit: Mais d'un autre coté, on écrit les arguments des fonctions prédéclarées souvent juste avec le type : et là, certains trouvent la syntaxe int* plus claire.... bref, pas un problème simple. peut être avoir une règle pour les variables et une pour les fonctions...

    Bonne chance
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  4. #4
    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
    Salut,
    Comme le disent Arzar et Mephisto, c'est la même chose les espaces n'étant pas significatifs ici.
    La meilleur solution est de n'avoir qu'une déclaration à chaque fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //int *p,i;
    int *p;
    int i;

  5. #5
    la_tupac
    Invité(e)
    Par défaut
    C'est tout à fait ça pour les règles d'écriture en C/C++.
    Mais pour le reste : http://www.bescherelle.com/

    Je n'arrive pas à comprendre la logique et surtout comment procédé.
    désolé mais moi ça me perturbe

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut
    Merci à tous, c'est bien ce qui me semblais

  7. #7
    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
    Remarque que la pratique veut qu'en C++ ça soit T* t; (et il me semble que c'est plus le contraire en C)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  8. #8
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Citation Envoyé par Goten Voir le message
    Remarque que la pratique veut qu'en C++ ça soit T* t; (et il me semble que c'est plus le contraire en C)
    Heu tu sort ça d'ou ? :s
    y'a des statistiques sur le sujet ?
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  9. #9
    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 méphistopheles Voir le message
    Heu tu sort ça d'ou ? :s
    y'a des statistiques sur le sujet ?
    J'ai pas des stats mais ca correspond a l'usage que je remarque et que je pratique. Petite verification dans les bouquins que j'ai sous la main (Stroustrup, Jossutis, K&R et Stevens, plus les normes respectives), aucun d'eux ne donne du code C++ en collant l'asterisque avec la variable, tous donnent le code C de cette maniere (je n'en ai pas ici qui donne du code C et du code C++, mais j'ai le souvenir d'un qui suivait l'usage propre a chaque langage).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  10. #10
    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
    Yep notamment parce que les livres de BS sont écrit comme ça et c'est aussi la convention (je sais pas si c'est dis explicitement) de la norme.

    Sa s'explique aussi par le fait qu'en le C++ on attache plus d'importances aux types qu'en C.
    Et
    indique bien que la variable est de type char* tout comme
    indique bien que la variable est de type char.

    Par opposition à l'autre notation :
    qui fait plutôt pensé à l'opérateur de déréférencement.

    Note : cette analyse n'est pas de moi mais de Gabriel Dos Reis. (il me semble, vieux message sur une ML)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  11. #11
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    +1 pour Goten. Je fais pareil. C'est plus clair comme ça.

  12. #12
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Je suis d'accord, à condition qu'on applique le pré-requis : Une seule déclaration de variable à la fois. Ce sont (logiquement) les personnes qui n'appliquent pas ce pré-requis que je vois conseiller de coller * à la variable.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  13. #13
    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
    Tout à fait, et c'est d'ailleurs aussi les gars du C (c'est pas péjoratif, je fais pas mal de C!) qui font plusieurs déclaration de variables par ligne. (cqfd :p)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  14. #14
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Je suis d'accord, à condition qu'on applique le pré-requis : Une seule déclaration de variable à la fois. Ce sont (logiquement) les personnes qui n'appliquent pas ce pré-requis que je vois conseiller de coller * à la variable.
    Citation Envoyé par Goten Voir le message
    Tout à fait, et c'est d'ailleurs aussi les gars du C (c'est pas péjoratif, je fais pas mal de C!) qui font plusieurs déclaration de variables par ligne. (cqfd :p)
    arf, je me fais taper sur les doigts moi

    mais c'est vrai, j'ai passé pas mal de temps à faire du C cette année (la faute aux microcontroleurs). En plus, ça m'a donné de mauvais réflexe comme le fait d'utiliser un char et des tas d'opérateurs binaires à la place de 8 bool ou d'un bitset (oui, ça n'aide pas à la lisibilité du code )...

    mais bon, normalemen, j'ai plus a en faire
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  15. #15
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    @Goten :
    Par opposition à l'autre notation :
    qui fait plutôt pensé à l'opérateur de déréférencement.
    Ce n'est pas un hasard : pour déclarer un pointeur sur char, on déclare, en accord avec la signification de l'opérateur unaire *, que l'objet pointé par i, *i, est du type char.
    Le même principe est utilisé pour déclarer un tableau de char : on déclare, en accord avec la signification de l'opérateur [], qu'un élément du tableau tab, tab[], est un char : char tab[]

    Toutefois, le C++ a violé la généralité de ce principe avec la déclaration des références qui ne sont pas en concordance avec la signification de l'opérateur & : char &i alors que &i n'est pas un char. Si il avait conservé ce principe, les références s'écriraient char *& i ce qui exprimerait bien que i est un char (puisque la combinaison des opérateurs *& est neutre) et que &i est un char*.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  16. #16
    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
    Euh, ouai, sauf que comme je l'ai expliqué c'est une particularité du C++. Et je dis aussi qu'en C++ on met l'accent sur les types rien de plus, pas que c'est un hasard ni quoi que ce soit. J'ai pas dis que la manière de faire du C++ était la bonne ni que celle du C n'était pas la bonne.


    Pour l'opérateur référence : sachant qu'il n'a pas du tout la même sémantique que l'opérateur unaire address-of je vois pas de problème. (et j'aurais aimé voir la tête des users si on leur avait dis que le passage se référence avait cette tête : T*& t)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/12/2012, 21h15
  2. Réponses: 9
    Dernier message: 19/03/2010, 11h14
  3. Ecrire les déclarations dans un module
    Par Olivier Regnier dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2008, 11h56
  4. Réponses: 2
    Dernier message: 08/03/2007, 10h23
  5. [Optimisation?] Déclaration de variable dans les boucles
    Par romaintaz dans le forum Langage
    Réponses: 5
    Dernier message: 11/08/2006, 16h08

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