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 :

Traducteur C++ -> MACRO


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur du dimanche
    Inscrit en
    Février 2013
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Février 2013
    Messages : 154
    Points : 105
    Points
    105
    Par défaut Traducteur C++ -> MACRO
    Bonjour,

    Alors pendant le confinement on s'ennuie..
    Pour un projet perso j'ai besoin de macros pour simplifier certaines fonctions.
    Et comme ce n'est pas toujours très simple à composer, surtout quand elles s'appellent entre elles, j'ai eu l'idée de faire un mini traducteur C++ vers Macro. L'idée c'est de saisir le code C++ qu'on veut que la macro traduise, et le traducteur nous écrit la macro.
    Pour l'instant je n'ai trouvé que des traducteurs Macro -> C++, enfin en bidouillant sur les flags du compilateur quoi.
    Pour ceux que ça intéresse voici le lien de mon dernier petit bébé : http://coding.alwaysdata.net/MacroDeducer/
    Ce n'est qu'une version alpha, qui ne prend pas encore compte les variadics, ni sans doute plein de tournures de code auxquelles je n'ai pas encore pensé. C'est quelque chose qui peut évoluer en fonction de vos remarques, si le besoin était réel. D'ailleurs, existe-t-il d'autres outils de ce genre online ? Je pense en tous cas pousser la fantaisie jusqu'à la traduction de certaines macros variadiques courantes, un peu pour la perf', et surtout pour le plaisir !

    À l'écoute de vos remarques
    "There should be no boundaries to human endeavor" - Hawking
    Retrouvez moi sur GitHub : https://github.com/JeanLouisMassei

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    J'ai du mal à voir un quelconque intérêt.
    Les macros sont dépliées pendant la phase du préprocesseur pour générer du code qui sera compilé.
    Si je voulais générer du code, macro ou non, j'ajouterais un script Python pour le faire en Pre-Build event.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur du dimanche
    Inscrit en
    Février 2013
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Février 2013
    Messages : 154
    Points : 105
    Points
    105
    Par défaut
    Si je voulais générer du code, macro ou non, j'ajouterais un script Python pour le faire en Pre-Build event.
    Intéressant.. Je vais aller fouiner de ce côté là, tiens.

    J'ai du mal à voir un quelconque intérêt. Les macros sont dépliées pendant la phase du préprocesseur pour générer du code qui sera compilé
    Hum.. Eh bien ce petit traducteur est totalement inutile pour des macros simples, puisqu'on peut facilement se représenter, à la fois la macro, et son code déplié (exemple MULTIPLICATION(a,b) a * b. Mais pour des traductions plus importantes, où je veux que la macro me déplie une classe entière avec ses membres et ses méthodes et fonction des arguments passés (oui je sais, c'est mal), l'exercice est un peu plus difficile à appréhender. L'idée c'est que j'input dans mon traducteur le résultat que je veux obtenir, et mon code C++ est automatiquement "replié".

    Je rappelle l'objectif : une aide à la composition des macros. Que le code sera redéplié ensuite, je le sais bien
    "There should be no boundaries to human endeavor" - Hawking
    Retrouvez moi sur GitHub : https://github.com/JeanLouisMassei

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par MrPchoun Voir le message
    une aide à la composition des macros
    Quelle est l'utilité ? Quelle est la difficulté ? À part échapper la fin de ligne


    Citation Envoyé par MrPchoun Voir le message
    Que le code sera redéplié ensuite, je le sais bien
    Quelle est l'utilité ? Pour moi, l'utilité d'1 macro c'est d'avoir "1 nom explicite sur 1 ligne" à la place d'1 bloc de code + ou - long (en plus évidemment du principe de la programmation procédurale)

    Non le plus intéressant c'est d'avoir 1 parser qui permet d'extraire/ d'ajouter-de supprimer/ de mettre à jour toutes les macros (avec sûrement des commentaires pour marquer les blocs de code à transformer en macros)
    parce qu'il est vrai que modifier des macros lorsqu’elles sont échappées et 1 rien "tassées", c'est 1 peu chiatique et il faut y aller piano.

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Et moi qui fait tout mon possible pour éviter les macros et les #define

    Dans quels cas vous faites des macros plutôt que du code directement (dans les cas où le code est possible bien sûr) les gens ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Dans quels cas vous faites des macros plutôt que du code directement (dans les cas où le code est possible bien sûr) les gens ?
    regarde mon commentaire sur 1 autre fil de discussion qui explique "1 nom explicite sur 1 ligne" (et le code 2 messages au dessus) (<- et au passage de réduire fortement de longues fonctions même si la longueur se retrouve dans les macros).

    Et 1 gros avantage des macros c'est qu'on peut isoler des morceaux de boucle et de tests (seulement le si ou le sinon) contrairement aux constexpr du C++11.
    Le C est également très permissif en permettant 1 macro d’appeler 1 autre macro.

    Évidement , à tout 1 chacun de prendre du recul et de juger si c'est bien ou pas/ dangereux ou pas/ faire attention aux effets non désirés.

  7. #7
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    je fais des macros pour tout ce qui est rébarbatif et qu'il n'y a pas de contournement simple:

    - Définir X opérateurs avec une implémentation un peu complexe. C'est souvent la même chose au nom de l'opérateur près. Ou de la spécialisation de template lorsque que les identifiants utilisés changent. Le faire en recopiant le code ou avec des intermédiaires n'est pas toujours satisfaisant.
    - Lorsqu'il y a besoin d'avoir les lignes / nom du fichier, mais que mettre explicitement __LINE__ ou __FILE__ n'a aucun intérêt. Donc plutôt des fonctions de log, assertion, trace. Le besoin sera réduit avec std::source_location (C++20), mais cela ne couvre pas le besoin d'avoir l'expression pour l'afficher (assert, macro de test unitaire).
    - Tout ce qui est génération avec beaucoup de bruit ou de répétition. Par exemple, l'expression decltype(auto) foo(T x, U y) noexcept(noexcept(x + y)) { return x + y; } ou avoir un code avec des concepts C++20 ou une émulation avec le même code (voir le code de range-v3).
    - Des choses qui se rapprochent de l’introspection.

    Donc les macros me servent à écrire quelque chose de simple plutôt que me trimbaler 36 mille lignes de bruit inutile.

    Perso, je ne vois pas l’intérêt d'un tel projet. Je commence toujours par écrire le code en C++ puis le transforme en macro à grand coup de rechercher/remplacer (c'est très rapide) et sinon c'est du code vraiment complexe avec des concaténations de macro et simili-boucles de partout, je ne vois pas comment un outil pourrais déduire la macro dont j'ai besoin.

Discussions similaires

  1. [Toutes versions] Traducteur macros VBA - débutant
    Par kimai dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/01/2011, 22h05
  2. [VB6] Exécuter une macro Access
    Par Nektanebos dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 22/02/2006, 16h32
  3. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/09/2002, 03h38
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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