[C] Compilateur plus souple que GCC pour les macros ?

Compilateur plus souple que GCC pour les macros ? [C] - C - Programmation

Marsh Posté le 16-02-2005 à 14:22:07    

Bonjour,
 
je cherche un compilateur qui aurait une gestion plus souple des macros.
 
Par exemple, j'aimerais qu'il prenne en compte des macros du type :
#define (a = b) fonctionEgalite(a,b)
pour remplacer les affections par une fonction.
 
J'ai beau chercher sur le net, je ne trouve pas les caractéristiques des préprocesseurs des différents compilateur :(.
 
Donc si une âme charitable voulait bien m'aider, ce serait pas de refus :D .
 
Merci d'avance :hello:

Reply

Marsh Posté le 16-02-2005 à 14:22:07   

Reply

Marsh Posté le 16-02-2005 à 14:27:47    

Aucun compilo ne t'offira ça. Il te faut donc te tourner vers des préprocesseurs génériques, et parser ton code avant de l'envoyer au compilo.
 
m4, sed, awk, etc.

Reply

Marsh Posté le 16-02-2005 à 20:19:24    

Oki :jap:.
Bon bah ... go pour les préprocesseurs génériques alors :sarcastic:.
 
Merci :hello:

Reply

Marsh Posté le 16-02-2005 à 20:35:55    

(a = b) fonctionEgalite(a,b)  
 
c'est une blague ?

Reply

Marsh Posté le 16-02-2005 à 22:03:51    

lol, bah non, c'est loin d'être une blague :sweat: . Mais si c'était pas un minimum tordu, j'aurais pas pausé la question sur ce forum :D.
 
Il se trouve que c'est un de mes besoins, et que, bien évidemment, les préprocesseurs C "standards" ne gèrent pas ce type de parsage. Donc je me demandais s'il n'existait pas des compilateurs "exotiques" (très exotiques, je te l'accorde :p ) permettant ce genre de fumisterie.
 
En l'occurence, Lam's m'a vite orienté dans mes recherches :whistle:.

Reply

Marsh Posté le 16-02-2005 à 22:07:47    

déjà = c'est l'affectation pas la comparaison. Et AUCUN préprocesseur ne peut t'aider, un cpp, c'est du copié-collé. Si tu tiens à ta notation = / ==, tourne toi vers un langage qui supporte la surcharge d'opérateurs. Ce que tu demandes, ça n'est pas des fumisteries, ça n'a tout simplement pas de sens.

Reply

Marsh Posté le 16-02-2005 à 22:30:40    

j'imagine la tête du code généré après une transformation pareille !
 

Code :
  1. int fonctionEgalite(i,0);
  2. char * fonctionEgalite(nom, "hello world" );

Reply

Marsh Posté le 16-02-2005 à 22:55:26    

La seule raison que je voie pour qu'il veuille faire ce genre de choses (en C), c'est de vouloir faire ce que font lex et yacc.

Reply

Marsh Posté le 17-02-2005 à 18:13:26    

Taz a écrit :

déjà = c'est l'affectation pas la comparaison.


J’ai jamais dis le contraire :na: . Bon d'accord j'ai écris dans mon premier post "affection" au lieu de "affectation" :pfff:, mais mon cerveau  fait plus facilement la correction "affection" --> "affectation" que "affection" --> "comparaison" :whistle:.

Taz a écrit :

Et AUCUN préprocesseur ne peut t'aider, un cpp, c'est du copié-collé. Si tu tiens à ta notation = / ==, tourne toi vers un langage qui supporte la surcharge d'opérateurs.


Je sais bien, mais le problème c'est que le langage C m'est imposé, et uniquement le C. Donc je vais pas me morfondre en me répétant incessamment "haaa si c'était du C++ ce serait tellement mieux :cry:".

Taz a écrit :

Ce que tu demandes, ça n'est pas des fumisteries, ça n'a tout simplement pas de sens.


Bah ... chacun son vocabulaire. Pour moi ça à un sens puisque c'est ce qu'il faut que j'obtienne comme résultat. Donc je préfère le qualifier de "fumisterie" ;).

Kristoph a écrit :

j'imagine la tête du code généré après une transformation pareille !
 

Code :
  1. int fonctionEgalite(i,0);
  2. char * fonctionEgalite(nom, "hello world" );



Hey oui, mais bien évidemment des contraintes de programmation sont imposées. Et pour reprendre ton exemple, il se trouve que les déclarations et les initialisations sont obligatoirement séparées. (peut-être que c'est là où voulez en venir Taz en parlant de non sens, dans la mesure ou les macros ne sont pas valides pour un langage C quelconque :sarcastic:)

el muchacho a écrit :

La seule raison que je voie pour qu'il veuille faire ce genre de choses (en C), c'est de vouloir faire ce que font lex et yacc.


Tout à fait :ange:. Donc je vais justement me rabattre sur lex & yacc, m4, ML1 ou quelque chose de ce genre :hello:

Reply

Marsh Posté le 17-02-2005 à 19:09:22    

Donc, on t'impose le C comme langage de programation, et toi tu demandes si tu peux utiliser un preprocesseur non standard ? Autant le faire en C++ et utiliser un compilateur C -> C++ comme ça. je rappelle que le preprocesseur fait partie intégrale du langage C et donc qu'il ne faut pas compter pouvoir en changer comme ça.

Reply

Marsh Posté le 17-02-2005 à 19:09:22   

Reply

Marsh Posté le 17-02-2005 à 19:42:43    

Kristoph a écrit :

Donc, on t'impose le C comme langage de programation, et toi tu demandes si tu peux utiliser un preprocesseur non standard ? Autant le faire en C++ et utiliser un compilateur C -> C++ comme ça. je rappelle que le preprocesseur fait partie intégrale du langage C et donc qu'il ne faut pas compter pouvoir en changer comme ça.


Quand tu dis qu'il fait partie intégrante du langage C, ceci ne se justifie que par le fait que le pré processeur dépend des normes du langage C. Après, sachant qu'il y a plusieurs normes, il y a des compilateurs qui ne réagissent pas de la même façon que d'autres (du genre y a des compilos où on peut se dispenser des free). Et je me demandais si il n'existait pas de compilateur beaucoup plus laxiste que ceux qui respectent les normes ANSI ou ISO (je suis un doux rêveur je sais :D)
 
et en ce qui concerne le C++, bah ... je peux pas je peux pas quoi, c'pas ma faute :cry: (car avec la surcharge des opérateurs s'aurait été tout bidon :p )

Reply

Marsh Posté le 17-02-2005 à 20:48:31    

On peut toujours se dispenser des free. Ça fait juste un gros memory leak mais bon, rien de plus grave.
 
Et puis je suis désolé, on te demande de faire un truc en C et tu dis que le C++ est explicitement interdit, par contre, tu es pret à prendre la première version batarde en non standard de compilateur C qui te passe sous la main en esperant que ça va passer comme une lettre à la poste ? Faut pas réver. Si le C est tellement important, c'est qu'il faut s'en tenir au C standard et c'est tout.


Message édité par Kristoph le 17-02-2005 à 20:50:02
Reply

Marsh Posté le 18-02-2005 à 18:42:24    

lol, quand je dis qu'on peut se dispenser des free, c'est pas ne pas les écrire et avoir un code pourrit ... c'est juste que c'est le compilo qui les gère à notre place ;).
 
Et effectivement il faut s'en tenir au maximum au C standard. Donc un C restreint ne pose pas de pb ;).
 
Enfin de toute façon on va pas se prendre la tête sur ça, moi j'ai eu des réponses claire et concises de la part de Lam's et el muchacho ( :jap: ), et c'est tout ce que je voulais :whistle:.
 
Par contre je sais pas encore lequel choisir. Lex & Yacc à l'air d'être l'arme ultime, mais je n'en ai peut-être pas forcément besoin :sarcastic:.  Enfin c'est à moi de me renseigner quoi.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed