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 :

Tab2d et pointeur


Sujet :

C

  1. #41
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    L'idée d'un typedef, c'est donner un nom à un type.

    On y gagne deux choses: une signification, et de l'uniformité.

    Actuellement, je travaille sur un programme qui commence par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef int source_id_type;
    typedef int bidule_id_type;
    typedef int data_type;
    Certes, j'aurai pu m'en passer. int est beaucoup plus court.
    Sauf que grâce à cela, mes boucles sont écrites ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void f(/*...*/) {
        for (source_id_type s = sources.debut; s!= sources.fin; ++s) {
            for (bidule_id_type b = bidules.debut; b!= bidules.fin; ++b) {
                afficher(s, b, data(s,b) );
            }
        }
    }
     
    //avec les fonctions:
    data_type data (source_id_type, bidule_id_type);
    afficher(source_id_type, bidule_id_type, data_type);
    Et si demain, j'ai besoin d'un long comme donnée, je ne changerai que le typedefde data_type.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  2. #42
    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
    Personnellement, "cacher" un pointeur me gêne souvent alors que "cacher" un tableau, en général, ne me gêne pas.
    La raison est qu'un pointeur n'est presque jamais représentatif de l'abstraction d'une donnée, et que dans ce cas le typedef n'est qu'une simplification syntaxique.
    Ce n'est pas le cas, en général, d'un tableau.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

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

  3. #43
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 629
    Points : 30 859
    Points
    30 859
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par leternel Voir le message
    L'idée d'un typedef, c'est donner un nom à un type.

    On y gagne deux choses: une signification, et de l'uniformité... Et si demain, j'ai besoin d'un long comme donnée, je ne changerai que le typedef de data_type
    Jusque là je suis absolument d'accord. Tu regroupes ainsi plusieurs variables travaillant ensemble dans la même plage de valeurs que tu peux facilement changer d'un clic. Mais là tu restes qu'à un seul niveau (remplacer un nom de type "simple" par un autre).

    Si maintenant tu changes de niveau d'implémentation et que ton typedef vient remplacer non plus un type simple (int, char, long) mais un tableau là tu auras peut-être de l'uniformité mais tu obscurcis un peu. Si je vois (par exemple) dans un code my_type toto j'aurai comme premier réflexe de considérer "toto" comme une variable simple. A la limite je n'aurai pas peur d'écrire for (toto=0; toto < 10; toto++). Et paf, my_type représente un tableau d'ints !!!
    Ce n'est (comme diogene le dit) pas "vraiment" génant, j'arriverai à m'y faire (bien plus facilement que si my_type représente un pointeur sur int) . Mais ça ne me viendrait pas à l'idée de le faire dans mon code.

    On peut me dire que je fais souvent des trucs de ce genre
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct {
        ...
        ...
        ...
    } t_nouveauType;
    et que, dans ces conditions, t_nouveauType toto induira quelqu'un d'autre à tenter lui-aussi cette boucle for() sur la variable toto. C'est vrai mais dans ce cas précis, la simplification apportée au code (regrouper dans une même entité des éléments qui vont ensembles) surpasse ce petit ennui.

    Bon c'est bien entendu qu'une discussion amicale sur différents points de vue que peuvent avoir différents programmeurs...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. pointeurs
    Par ghost74 dans le forum C
    Réponses: 3
    Dernier message: 14/12/2002, 03h52
  2. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 01h43
  3. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 21h14
  4. djgpp et pointeurs far -2
    Par elvivo dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 29/07/2002, 23h43
  5. djgpp et pointeurs far
    Par elvivo dans le forum C
    Réponses: 2
    Dernier message: 13/07/2002, 01h44

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