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++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Inscrit en
    D�cembre 2003
    Messages
    491
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2003
    Messages : 491
    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 �m�rite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    D�tails du profil
    Informations personnelles :
    �ge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    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 �clair�
    Inscrit en
    D�cembre 2003
    Messages
    491
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2003
    Messages : 491
    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 �m�rite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    D�tails du profil
    Informations personnelles :
    �ge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    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[]="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 Expert
    Avatar de xavlours
    Inscrit en
    F�vrier 2004
    Messages
    1 832
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 832
    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 �m�rite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    D�tails du profil
    Informations personnelles :
    �ge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    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 �clair�
    Inscrit en
    D�cembre 2003
    Messages
    491
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2003
    Messages : 491
    Par d�faut
    merci pour les reponses je vais encore bucher la dessus

    marc_3

  8. #8
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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();
    est �quivalente � et non �

  9. #9
    Membre �m�rite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    D�tails du profil
    Informations personnelles :
    �ge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    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 confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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).

+ 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, 18h03
  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, 18h59
  3. Recherche par mots cles
    Par Seth77 dans le forum Langage SQL
    R�ponses: 2
    Dernier message: 26/03/2006, 15h58
  4. [Mots cles]Signification de transient et volatile
    Par Pill_S dans le forum Langage
    R�ponses: 2
    Dernier message: 14/07/2004, 11h58

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