Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1131 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C/C++] controller le preprocesseur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++] controller le preprocesseur

n°1780138
Cytoplasm
Posté le 29-08-2008 à 17:16:23  profilanswer
 

Salut a tous
 
J'aimerai bien pouvoir appeler un preprocesseur avec les ifdef que je veux et recuperer le fichier source. L'idee c'est que le code original marche et que je puisse virer des parties du code avant de le donner a quelqu'un d'autre.
 
exemple: transformer
 

Code :
  1. #include<bla>
  2. code1
  3. #ifndef SYMB
  4. code2
  5. #endif


 
en ce code ci quand on definit SYMB
 

Code :
  1. #include<bla>
  2. code1


 
notons que ceci n'est pas le comportement de gcc -E -DSYMB qui appliquerait le include comme un gros bourrin et me rendrait un code tout moche et completement illisible
 
toute initiative a base de text processing est exclue parce que les ifdef peuvent etre compliques genre #if defined(BLAH)||defined(CHOMBIER)
 
toute vos idees sont bienvenues
 
Merci d'avance
 
edit: j'avais inverse ifdef et ifndef


Message édité par Cytoplasm le 29-08-2008 à 18:03:19
mood
Publicité
Posté le 29-08-2008 à 17:16:23  profilanswer
 

n°1780157
Un Program​meur
Posté le 29-08-2008 à 17:48:57  profilanswer
 

Tu es sur du resultat que tu desires, j'ai l'impression que tu as inverse une condition.
 
Et qu'est-ce qui doit se passer si SYMB est par une directive #define dans le fichier (ou meme, dans un fichier inclu)?
 
J'ai l'impression que tu es bon pour reimplementer un preprocesseur qui fait ce que tu veux; si c'est suffisemment restreint, ca peut etre relativement petit.

n°1780162
Cytoplasm
Posté le 29-08-2008 à 18:01:39  profilanswer
 

Ha ouais, je suis con, j'ai inverse #ifdef et ifndef. :)
 
SYMB est toujours defini par moi (et pas dans le fichier ni dans un include)
 
je me demandais si il y avait pas moyen d'utiliser m4

n°1780892
matafan
Posté le 01-09-2008 à 11:33:59  profilanswer
 

M4 je ne pense pas, ce n'est pas du tout fait pour ça.

n°1780933
Joel F
Real men use unique_ptr
Posté le 01-09-2008 à 12:40:51  profilanswer
 

la de tête à part faire un truc à la main :'( je vois pas de soluce.
J'ai exactement la même problématique pr un de mes projets, et j'ai donc pris cette route.

n°1780982
Un Program​meur
Posté le 01-09-2008 à 13:52:23  profilanswer
 

Ca ne m'etonnerait pas que ce soit deja disponible (bien que mes recherche n'ait rien trouve, j'avais le vague souvenir d'avoir vu quelque chose qui faisait cela).  Des outils comme emacs, doxygen, ... ont cette possibilite, mais pas a ma connaissance celle de sauver le resultat.
 
En passant, avec les limitations que Cytoplasm donne:
   - uniquement les symboles definis sur la ligne de commande
   - uniquement des #if avec des expressions testant defined()
ce ne doit pas etre trop complique a faire.

n°1781046
Cytoplasm
Posté le 01-09-2008 à 16:38:46  profilanswer
 

J'ai regarde m4, c'est carrement mais alors carrement pas fait pour ca...
 
Toutes mes recherches sur le net n'ont rien donne! Pourtant, ca m'a l'air super standard de vouloir vendre une partie de son code et garder une autre partie...
 
Bon, et puis j'accorde que c'est pas super dramatique de le faire a la main, mais ca me saoule completement! entre autre joyeusete, il faut gerer les trucs comme #if BLAH || defined(SYMB)
bouh bouh ;-(

n°1781168
matafan
Posté le 01-09-2008 à 21:47:50  profilanswer
 

Une idée comme ça : tu peux peut-être faire un gcc -E, un gcc -E -DSYMB, comparer les résultats, et injecter les différences dans ton source ? Le problème c'est de savoir où injecter chaque différence.

n°1781189
Joel F
Real men use unique_ptr
Posté le 01-09-2008 à 22:35:51  profilanswer
 

pp doit mettre des trucs genre #line là ou il à modifier le contenu.

n°1781201
Cytoplasm
Posté le 01-09-2008 à 22:48:15  profilanswer
 

je suis pas sur que ca marche de faire le diff pour la raison suivante:
supposons que j'ai un #if (!defined(SYMB) || defined(BLAH))  
donc ce que j'aimerais c'est que ca soit transforme en #if defined(BLAH) et ca je vois vraiment pas comment je vais le recuperer depuis le diff etant donne que le prepro va toujours evaluer defined(BLAH)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C/C++] controller le preprocesseur

 

Sujets relatifs
programmation CApprendre le C#
[RESOLU] Visual C++ 6.0 : Plantage à la compilation[C#] Recherche LDAP
programmation port parallèle avec C++Livre Language C - Ansi de Kernighan et Brian de Palmas ...
problème fichier CPSPprog, créer des jeux en C pour la PSP !
[C#][.NET] Est il possible de faire de l'héritage avec des ASCX ASPX ?Intégrer Flash/AS3 dans C/GTK+
Plus de sujets relatifs à : [C/C++] controller le preprocesseur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR