Préprocesseur C

Préprocesseur C - C - Programmation

Marsh Posté le 26-11-2008 à 11:50:08    

Bonjour,
 
j'aimerais savoir s'il est possible de géréner des define à partir d'autres define.
Par exemple dans un fichier toto.h :
 


#if TOTO == 1
#define NAME(a) toto_name_##a
#else
#define NAME(a) name_##a
#endif
 
#define NAME(foo) 5
#define NAME(bar) 6


 
Et ainsi pouvoir générer des define différents de cette manière :

#define TOTO 1
#include "toto.h" // va définir toto_foo et toto_bar
#undef TOTO
#include "toto.h" // va définir foo et bar


 
Merci d'avance :)

Message cité 1 fois
Message édité par freewol le 26-11-2008 à 11:50:53
Reply

Marsh Posté le 26-11-2008 à 11:50:08   

Reply

Marsh Posté le 26-11-2008 à 13:40:59    

Il faut faire l'essai, parce qu'il existe quelques variantes sur le traitement des defines selon les compilateurs.
 
Mais d'une manière générale, j'évite les opérations trop particulières comme celle-là parce que cela risque de  
marcher avec un environnement de développement, mais pas avec un autre. En plus, ces bidouilles ne sont jamais très lisibles, ni très faciles à maintenir. Et comme il existe des moyens de programmer proprement sans cela, autant le faire.

Reply

Marsh Posté le 27-11-2008 à 17:56:39    

freewol a écrit :

Bonjour,
 
j'aimerais savoir s'il est possible de géréner des define à partir d'autres define.
Par exemple dans un fichier toto.h :
 


#if TOTO == 1
#define NAME(a) toto_name_##a
#else
#define NAME(a) name_##a
#endif
 
#define NAME(foo) 5
#define NAME(bar) 6




Oui c'est possible, ça ne pose aucun problème.

freewol a écrit :

t ainsi pouvoir générer des define différents de cette manière :

#define TOTO 1
#include "toto.h" // va définir toto_foo et toto_bar
#undef TOTO
#include "toto.h" // va définir foo et bar


 
Merci d'avance :)


Là par contre j'ai du mal à te suivre. Ta deuxième inclusion va lever un warning, puisqu'elle va redéfinir la macro NAME. D'autre part je ne comprend pas ton commentaire "va définir toto_foo et toto_bar". L'inclusion ne va rien définir du tout, si ce n'est la macro NAME. Que veux-tu dire par "va définir toto_foo et toto_bar" ?


Message édité par matafan le 27-11-2008 à 17:57:17
Reply

Marsh Posté le 28-11-2008 à 15:18:13    

Bonjour,
 
en gros j'espérais ce comportement :

#define TOTO 1
#include "toto.h" // va définir toto_foo et toto_bar


entraine que

#if TOTO == 1
#define NAME(a) toto_name_##a
#else
#define NAME(a) name_##a
#endif


devient  


#define NAME(a) toto_name_##a


et donc  

#define NAME(foo) 5
#define NAME(bar) 6


devient

#define toto_foo 5
#define toto_bar 6


 
Désolé si ça n'est pas très clair, surtout que ce n'est probablement pas possible.

Reply

Sujets relatifs:

Leave a Replay

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