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 :

[deb]Mot cle tyledef complement d'info


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 491
    Points : 245
    Points
    245
    Par défaut [deb]Mot cle tyledef complement d'info
    Bonjour,
    Je fais des exo sur Cpp et je suis tombee sur un livre d'ex. qui me donne un exemple ou on travaille avec les commandes suivantes:

    const int N(6); //Taille maxi liste
    typedef int type;
    typedef type Liste[N];
    J'ai trouve cela suffisament curieux pour chercher a me renseigner un plus loin et je suis tombe sur cette definition de la FAQ.



    la var. struct définit un nom pour une structure. Lors de la déclaration d'une variable, il faut la déclarer en spécifiant qu'il s'agit d'une structure.

    typedef struct définit un type de variable et peut être utilisé comme tel, c'est à dire en déclarant directement la variable avec son type et sans avoir besoin de spécifier qu'il s'agit d'une structure.
    En dehors du fait que je trouve le concept de bloc de variable accolee les une aux autres dans une entite tres pratique, je voulais savoir si on pourrait considerer cela comme un objet assez primitif sans encore de bloc de fonctions accoles et integre au bloc de donnees?

    D'avance merci

    Marc_3

  2. #2
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Attention à ne pas confondre avec d'autres langages (mieux typés).

    typedef ne définit pas un nouveau type mais un alias vers un type.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef char TChar;
    int Length = 0;
    TChar Hello[]="Hello World"; // identique à la déclaration char Hello[15];
     
    Length = strlen(Hello);
     
    Hello[5] = '!';
     
    cout << Hello;
    Contrairement à une vrai définition de type, il reste compatble avec son type de base.

    Pour ta question, je n'ai pas saisi.

  3. #3
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 491
    Points : 245
    Points
    245
    Par défaut
    Je cherche a comprendre ce qui ce passe au niveau de l´interpreteur quand il recoit le code. Je crois avoir compris que quand un code est compile l'interpreteur reserve les espace de memoire dans un tas quelque part et le linker organise des pointeurs entres toutes les references decrite par le code.

    J'essaie de mettre en relation avec cela ce que j'ai plus ou moins compris en ce qui concerne les objets: Cad le meme processus mais avec en plus de la reservation d'espace de memoire pour les donnees la meme chose pour les methodes.

    Ce qui reviens a dire que les structures seraient en fait des objets primitif sans methode.

    En fait pour repondre a ca il faudrai avoir vu au moins une fois l'interpreteur ce qui est loin d'etre mon cas.

  4. #4
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    La compilation se passe en deux phases:
    Interprétation des directives (#define, typedef, #include...)

    Puis compilation du code intermédiaire.

    Dans l'exemple précédent, en sortie de la première phase, le compilateur lira ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int Length = 0; 
    char Hello&#91;&#93;="Hello World";
    Toutes les occurrences de 'TChar' sont remplacées en 'char'. C'est pour cette raison que l'on ne peut pas parler strictement de nouveau type, mais d'alias.

  5. #5
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Le typedef peut etre utile lorsque tu as des types au noms interminables genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    multimap< vector< struct sockaddr_in>, struct ... >
    dans ton code.

    Par contre lorsque tu définis des typedef à partir d'autres typedef, ca peut vite devenir infernal, surtout si tu dois caster ...
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Il y a surtout un grand risque d'erreur, car le préprocessing ne se fait qu'en une seule passe. Je me suis fait avoir une fois avec des macros.

  7. #7
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 491
    Points : 245
    Points
    245
    Par défaut
    merci pour les reponses je vais encore bucher la dessus

    marc_3

  8. #8
    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 Caine
    La compilation se passe en deux phases:
    Interprétation des directives (#define, typedef, #include...)

    Puis compilation du code intermédiaire.
    Non. Formellement il y a 9 phases et pas 2. Mais surtout, typedef n'est géré ni par le préprocesseur (en gros les 4 premières phases), ni comme une macro (son effet n'est pas un remplacement textuel).

    En particulier, considérer un typedef comme un remplacement textuel ne permet pas de comprendre pourquoi dans la portée dela déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const pointeur ptr = f&#40;&#41;;
    est équivalente à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int* const ptr = f&#40;&#41;;
    et non à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const int* ptr = f&#40;&#41;;
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  9. #9
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Je ne parlais que des eux phases de preprocess et compilation à la fin de la première.

    Peux importe pour un débutant le nombre de phases qui aboutissent au code binaire.

    Ensuite, il n'y a bien qu'une seule phase de peprocess, essai donc de faire une macro qui utilise une autre macro. Je n'ai plus le code sous la main. Mais si je retrouve le principe, je le posterais.

    Quant à ta question, à vue de nez, je pense que le preprocess gère tout simplement la priorité ou d'autres critères.

  10. #10
    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
    Note: Je cite dans le désordre...

    Citation Envoyé par Caine
    Peux importe pour un débutant le nombre de phases qui aboutissent au code binaire.
    Je suis d'accord que le nombre de phases utilisées dans la description par la norme est peut utile. Mais j'ai du mal à voir moins de 3 phases (pre-process, compilation et édition de liens).

    L'important dans ma remarque est que la gestion des typedefs n'est pas faite durant le preproccess. Celui-ci est décrit et fonctionne en substitution lexicale hors les typedef ne sont pas décrit comme tel d'une part, et d'autre part ne sont pas implémentables comme tel non plus (j'ai déjà donné un exemple, un autre est qu'ils obéissent aux règles de portée et qu'il est impossible d'implémenter celles-ci sans faire une analyse gramaticale et sémantique relativement poussée).

    Ensuite, il n'y a bien qu'une seule phase de peprocess, essai donc de faire une macro qui utilise une autre macro. Je n'ai plus le code sous la main. Mais si je retrouve le principe, je le posterais.
    Je n'ai aucun problème à écrire des macros qui utilisent d'autres macros. Les macros du C++ forment même un langage complet (voir boost pour voir jusqu'ou on peut pousser cela). Mais bon, comme tout macro-langage, il est assez difficile à maîtriser.

    Quant à ta question, à vue de nez, je pense que le preprocess gère tout simplement la priorité ou d'autres critères.
    Je ne vois pas comment (et j'ai commencé à écrire pourquoi ci-dessus). Ayant dans une vie antérieure, écrit un préprocesseur pour le C ainsi qu'un front-end pour un sous-ensemble du C qui comprenait les typedef, une description plus précise de ta méthode m'intéresse vivement (la gestion des typedef est quelque chose de relativement compliqué en C et en C++, surtout quand on essaie d'utiliser simplement des outils comme lex et yacc; un moyen pour le faire proprement dans le préprocesseur serait un progrès par rapport à toutes les méthodes que je connais).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

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

Discussions similaires

  1. le mot cle mutable
    Par Narzyl28 dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2007, 19h03
  2. [Requête] Attribution auto de mots clés.
    Par Gunther dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/12/2006, 19h59
  3. Recherche par mots cles
    Par Seth77 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2006, 16h58
  4. [Mots cles]Signification de transient et volatile
    Par Pill_S dans le forum Langage
    Réponses: 2
    Dernier message: 14/07/2004, 12h58

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