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

  FORUM HardWare.fr
  Programmation
  C

  Préprocesseur C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Préprocesseur C

n°1816921
freewol
Ceci n'est pas une citation
Posté le 26-11-2008 à 11:50:08  profilanswer
 

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
mood
Publicité
Posté le 26-11-2008 à 11:50:08  profilanswer
 

n°1816982
olivthill
Posté le 26-11-2008 à 13:40:59  profilanswer
 

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.

n°1817935
matafan
Posté le 27-11-2008 à 17:56:39  profilanswer
 

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
n°1818429
freewol
Ceci n'est pas une citation
Posté le 28-11-2008 à 15:18:13  profilanswer
 

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.


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

  Préprocesseur C

 

Sujets relatifs
tri fusion en CListing des différences avec le C++
[C] Problème de lecture dans un fichier en C : fscanf[C] Bataille navale, sauvegarde/restauration.
[C] Comment faire un getchar() sans pause après [débutant][questionalacon] scanf et chaîne de caractères
[C] Opérations avec des matrices[Résolu] Problème pour lire et écrire des fichiers pgm en C++
[ C ] Bonjour, aide pour traduire en C .[C/C++] controller le preprocesseur
Plus de sujets relatifs à : Préprocesseur C


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