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

Langage Delphi Discussion :

[CODE] Compilation conditionnelle ?


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 28
    Points
    28
    Par défaut [CODE] Compilation conditionnelle ?
    Ce code ne fonctionne pas, le compilateur ignore la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ShowMessage('DATA défini');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    procedure TForm1.Test;
    begin
      {$UNDEF DATA}
      compil;
      {$DEFINE DATA}
      compil;
      {$UNDEF DATA}
    end;
     
    procedure TForm1.Compil;
    begin
    {$IFDEF DATA}
      ShowMessage('DATA défini');
    {$ELSE}
      ShowMessage('Indéfini');
    {$ENDIF}
    end;
     
    procedure TForm1.btTestClick(Sender: TObject);
    begin
      Test;
    end;
    ce n'est que lorsque je mets ce code dans une seule procédure que ça fonctionne, mais ça n'a pas grand interêt...

    Qu'est ce qui ne va pas ?

  2. #2
    Membre du Club Avatar de philemon_siclone
    Inscrit en
    Septembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 67
    Points : 67
    Points
    67
    Par défaut
    Ben ça parait logique, c'est du preprocessing : donc le precompilateur fait une passe sur ton fichier:
    1) il rencontre {$UNDEF DATA}
    2) il rencontre {$DEFINE DATA}
    3) il rencontre {$UNDEF DATA}
    4) il rencontre {$IFDEF DATA} : à ce moment là DATA n'est pas defini, donc il n'insère pas "ShowMessage('DATA défini');" mais "ShowMessage('Indéfini');"

    Puis après il compile...

    J'espère que mes explications sont à peu près claire: en gros il faut voir les instructions de preprocessing comme du remplacement de texte qui se fait avant la compil et pas comme du code qui s'execute (la preprocesseur ne connait pas les notions de fonction, de procedure, de variable,de classe, etc. ).

  3. #3
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    677
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 677
    Points : 638
    Points
    638
    Par défaut
    l'explication de philemon_siclone est tout à fait satisfaisante

    ce qui aurait pû marcher

    fichier compil.inc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    {$IFDEF DATA} 
      ShowMessage('DATA défini'); 
    {$ELSE} 
      ShowMessage('Indéfini'); 
    {$ENDIF}
    votre programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    procedure TForm1.Test; 
    begin 
      {$UNDEF DATA} 
      {$include compil.inc} 
      {$DEFINE DATA} 
      {$include compil.inc} 
      {$UNDEF DATA} 
    end; 
     
     
    procedure TForm1.btTestClick(Sender: TObject); 
    begin 
      Test; 
    end;
    à condition que le préprocesseur exécute les include en priorité

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Merci pour ces réponses,
    (des problèmes de connexion ne m'ont pas permis de répondre plus vite)

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

Discussions similaires

  1. Code compilable sous Windows et Unix
    Par xzed dans le forum C
    Réponses: 9
    Dernier message: 16/05/2006, 16h06
  2. Compilation conditionnelle
    Par srvremi dans le forum Langage
    Réponses: 10
    Dernier message: 23/02/2006, 18h51
  3. Compilation conditionnelle
    Par owsion dans le forum Langage
    Réponses: 6
    Dernier message: 25/10/2005, 17h15
  4. [LG] Compilation conditionnelle et multiples unités
    Par Alcatîz dans le forum Langage
    Réponses: 4
    Dernier message: 05/06/2005, 08h58
  5. syntaxe pour compilation conditionnelle ?
    Par tintin72 dans le forum C
    Réponses: 9
    Dernier message: 17/05/2005, 18h12

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