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 :

Delphi XE3 et les 'preprocessor macros commands'


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 249
    Points : 106
    Points
    106
    Par défaut Delphi XE3 et les 'preprocessor macros commands'
    Bonjour,

    J'essaie présentement la version trial de Delphi XE3 et je me demandais s'ils avaient ajouté au language l'équivalent des preprocesor macros commands comme en C++, voir exemple ci-dessous. Il semble que non dommage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    #define ERRMSG(x, str) printf("Error: %d \n%s", x, str)
     
    #define SUM(x,y)  ((x) + (y))
    :
     
    ERRMSG(2, "Press Enter, then ESC");
     
    /*expands to:  printf("Error: %d \n%s", 2, "Press Enter, then ESC"); */
     
    return SUM(f(i, j), g(k, l));
     
    /*expands to:  return ( (f(i, j)) + (g(k, l)) ); */
    On oubli {$I filename} {$INCLUDE filename} ce n'est pas fait pour ça.

    Comment réaliser la même chose avec Delphi ? Est-ce possible ?

    Merci à tous.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 665
    Points : 25 459
    Points
    25 459
    Par défaut
    Une Fonction ! non ?
    Utilisation de la directive inline qui avec une faible chance pourrait peut-être t'éviter quelques PUSH et CALL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure ERRMSG (x: Integer; const str: string); inline;
    begin
      MessageDlg(Format('Error: %d '#13#10'%s', [x, str]), mtError, [mbOK], 0);
    end;

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 249
    Points : 106
    Points
    106
    Par défaut
    J'aurais du ajouter que les macros devront être utilisés plusieurs fois peut-être même plusieurs dizaines de fois donc inline ne serait pas justifié ici.

    Merci.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 812
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 812
    Points : 13 527
    Points
    13 527
    Par défaut
    Citation Envoyé par PiPo123 Voir le message
    J'aurais du ajouter que les macros devront être utilisés plusieurs fois peut-être même plusieurs dizaines de fois donc inline ne serait pas justifié ici.
    C'est pourtant là où cette directive trouve tout son intérêt
    (pour autant que tu parles bien de boucles ou d'appels récursifs)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 249
    Points : 106
    Points
    106
    Par défaut
    Mise à jour,

    Je viens de me rappeler que Turbo Pascal l'ancêtre de Delphi était un compilateur 1 passe donc il a une impossibilité technique a cette fonctionnalité car il est impossible d’avoir des fonctions de prétraitement si on a pas au moins 2 passes et Delphi semble suivre la même approche que son illustre parent Turbo Pascal. Donc peine perdu en théorie du moins car on pourrait toujours lancer un programme extérieur pour faire le boulot.

    Zut...

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par PiPo123 Voir le message
    Mise à jour,

    Je viens de me rappeler que Turbo Pascal l'ancêtre de Delphi était un compilateur 1 passe donc il a une impossibilité technique a cette fonctionnalité car il est impossible d’avoir des fonctions de prétraitement si on a pas au moins 2 passes et Delphi semble suivre la même approche que son illustre parent Turbo Pascal. Donc peine perdu en théorie du moins car on pourrait toujours lancer un programme extérieur pour faire le boulot.

    Zut...
    la compilation 1 passe impose que tout ce qui est utilisé soit déclaré en amont, mais rien n'empêche théoriquement d'avoir des macros.

    Par contre je trouve personnellement que cela nuit à la lisibilité du code.

    la version Pascal des macros c'est "inline", mais ta réponse à Shai me fait penser que tu ne comprends pas soit les macros, soit l'inline, car le résultat est le même.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 249
    Points : 106
    Points
    106
    Par défaut
    Hum... C'est possible, si le compilateur le voit en amount il devrait pouvoir insérer le code sans problème donc ce que j'ai dit précedemment n'est peut-être pas pertinent, réponse trop rapide !. J'ai peut-êre mal choisi mon exemple car il ne s'agit pas nécessairement d'insérer des fonctions ou procédures une vrai macro peut insérer n'importe quoi non !

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par PiPo123 Voir le message
    Hum... C'est possible, si le compilateur le voit en amount il devrait pouvoir insérer le code sans problème donc ce que j'ai dit précedemment n'est peut-être pas pertinent, réponse trop rapide !. J'ai peut-êre mal choisi mon exemple car il ne s'agit pas nécessairement d'insérer des fonctions ou procédures une vrai macro peut insérer n'importe quoi non !
    La réponse finale est donc, même s'il existe des solutions pour certains cas, Delphi ne supporte pas les macros.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 249
    Points : 106
    Points
    106
    Par défaut
    Voilà, discussion terminée.

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

Discussions similaires

  1. Enlever les pointillés d'une CheckBox ( Delphi Xe3 )
    Par Gregory666 dans le forum Débuter
    Réponses: 1
    Dernier message: 28/05/2013, 11h27
  2. Delphi Xe3 : les projets à venir
    Par John Colibri dans le forum EDI
    Réponses: 0
    Dernier message: 21/08/2012, 10h49
  3. Réponses: 2
    Dernier message: 09/11/2006, 10h57
  4. Réponses: 3
    Dernier message: 04/10/2005, 09h33
  5. Delphi 7 et les TStringGrid
    Par Claude HENRY dans le forum Composants VCL
    Réponses: 6
    Dernier message: 28/05/2003, 09h18

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