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

  FORUM HardWare.fr
  Programmation
  C++

  DEFINE ensembles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

DEFINE ensembles

n°1087025
philzzz
Posté le 17-05-2005 à 17:40:33  profilanswer
 

Salut!
 
Voici mon pb:  
 
je defini plusieurs defines du type :
#define TOTO A1B2
#define TATA C3D4E5
 
mon but est ensuite de faire une chaine de caractère  "A1B2C3D4E5" dans le code, en utilisant TOTO TATA, mais le pb c'est que qd je fais printf("TOTO TATA" ); ben il ne me les remplace pas , c'est vrai que ça semble normal vu que ya des ""  :D , mais bon, ya pas une astuce qui existe par hasard?
 
je sais que je pourrais faire çà aussi define TOTO "A1B2" ,puis concatener les strings mais bon, c un peu lourd... j'aimerai éviter, pour l'instant je fais çà et j'ai un truc du style dans le code :
string str;
str += TOTO;
str += TATA;
 
au pire j'aimerai mettre tout sur la meme ligne mais comment?
 
 
merci d'avance
 
Phil
 

mood
Publicité
Posté le 17-05-2005 à 17:40:33  profilanswer
 

n°1087075
Taz
bisounours-codeur
Posté le 17-05-2005 à 18:26:42  profilanswer
 

#define TOTO "A1B2"
#define TATA "C3D4E5"
 
 
TOTO TATA
 
le cpp passe et colle tout
 
et voilà
 
"A1B2C3D4E5"

n°1087105
blastman
just me !
Posté le 17-05-2005 à 18:49:32  profilanswer
 

const


---------------
http://www.blastmanu.info
n°1087112
Lam's
Profil: bas.
Posté le 17-05-2005 à 18:57:18  profilanswer
 

#define TOTO 1234
#define TATA ABCD
#define TO_STRING(x) #x
 
const char * s = TO_STRING(TOTO##TATA);

n°1087125
jesus_chri​st
votre nouveau dieu
Posté le 17-05-2005 à 19:06:44  profilanswer
 

Lam's a écrit :

#define TOTO 1234
#define TATA ABCD
#define TO_STRING(x) #x
 
const char * s = TO_STRING(TOTO##TATA);


 
ou TO_STRING(TOTO) TO_STRING(TATA);
plutôt
 
Je préfère la méthode de Taz


Message édité par jesus_christ le 17-05-2005 à 19:07:37
n°1087128
Lam's
Profil: bas.
Posté le 17-05-2005 à 19:14:19  profilanswer
 

jesus_christ a écrit :

ou TO_STRING(TOTO) TO_STRING(TATA);
plutôt
 
Je préfère la méthode de Taz


Yup, mais il est parfois nécessaire de faire un bon vieux:
   TOTO##TATA = TO_STRING(TOTO##TATA);
équivalent à:
  TOTO##TATA = TO_STRING(TOTO) TO_STRING(TATA); // perso, j'aime pas trop cette écriture.
Et évidemment, la méthode de Taz ne marche alors pas puisqu'elle est basée sur des chaînes. Ceci-dit, mis à part pour faire de l'introspection, de la génération de code très alambiqué, ou ce genre de choses là, c'est rare qu'on ait besoin du préprocesseur comme ça. Donc j'étais parti sur ce principe là...

n°1087132
jesus_chri​st
votre nouveau dieu
Posté le 17-05-2005 à 19:18:53  profilanswer
 

c'est vrai qu'en C++ :
 
const std::string TOTO = "1234";
const std::string TATA = "ABCD";
 
std::cout << (TOTO + TATA) << '\n';
 
ça me parait plus propre. Cela dit l'operateur ## permet de faire des trucs assez puissants.
Non Taz, ne me dit pas que ## n'est pas un operateur du C++, je sais et tout le monde s'en fout :D

n°1087329
Mackila
Posté le 17-05-2005 à 23:17:37  profilanswer
 

jesus_christ a écrit :

[...]
const std::string TOTO = "1234";
const std::string TATA = "ABCD";
 
std::cout << (TOTO + TATA) << '\n';
 
[...]


 
 :sweat:  
 
Les compilos optimisent ce genre de trucs... ?

n°1087359
Taz
bisounours-codeur
Posté le 17-05-2005 à 23:54:34  profilanswer
 

non, et j'en vois pas le besoin

n°1087392
haazheel
Posté le 18-05-2005 à 00:57:47  profilanswer
 

jesus_christ a écrit :

ça me parait plus propre. Cela dit l'operateur ## permet de faire des trucs assez puissants.
Non Taz, ne me dit pas que ## n'est pas un operateur du C++, je sais et tout le monde s'en fout :D


 
Je ne connaissais pas cet opérateur...
 
On l'utilise dans quels autres cas?

mood
Publicité
Posté le 18-05-2005 à 00:57:47  profilanswer
 

n°1087433
slash33
Posté le 18-05-2005 à 09:04:37  profilanswer
 

L'intérêt d'utiliser la syntaxe C++ (ie pas de #define) c'est que le code est debuggable!
 
D'ailleurs dans les ouvrages "d'expert", il est toujours recommandé de ne pas utiliser les #define pour définir des constantes.
 
Cela ne veut pas dire qu'il ne faut pas utiliser les #define mais que son usage est réservé à des cas d'utilisation particuliers.
 
A savoir: quand tu fait #define MA_CONSTANTE = "Ma constante"
 
string toto = MA_CONSTANTE;
 
en fait le précompilateur remplace MA_CONSTANTE par "Ma constante" (donc strictement impossible a debuggé)


---------------
Touche pas à mon code!
n°1087454
Mackila
Posté le 18-05-2005 à 09:31:24  profilanswer
 

Lam's a écrit :

#define TOTO 1234
#define TATA ABCD
#define TO_STRING(x) #x
 
const char * s = TO_STRING(TOTO##TATA);


 
T'es sur que ca marche ca ?
 
Ca m'imprime TOTOTATA...

n°1087473
philzzz
Posté le 18-05-2005 à 09:48:38  profilanswer
 

merci :), je pensais qu'il me balancerai une syntax error en faisant TOTO TATA , mais en fait ça marche c'est cool :)
"A1B2""C3D4" c equivalent à "A1B2C3D4", c même pas lors du remplacement des define qu'il vire les guillemets, mais à la compil donc. J'ai bon ?

n°1088381
jesus_chri​st
votre nouveau dieu
Posté le 18-05-2005 à 19:33:24  profilanswer
 

c'est le préprocesseur qui fait ça il me semble (Taz ?)
 
le préprocesseur il s'occupe de :
 
- les commentaires
- les #machin (#include, #if...)
- les backslash en fin de ligne
- les concaténations de string "bon" "jour" -> "bonjour"
- les constantes __LINE__, __FILE__...


Message édité par jesus_christ le 18-05-2005 à 19:34:07
n°1088390
skelter
Posté le 18-05-2005 à 19:39:30  profilanswer
 

jesus_christ a écrit :


- les concaténations de string "bon" "jour" -> "bonjour"


 
ben ca fait quoi

echo "bon" "jour" | cpp


?


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

  DEFINE ensembles

 

Sujets relatifs
2 questions: define() et omettre un paramètre sur une fonction perso[javascript] Tester qu'une fonction est défine
afficher les sous ensembles d un ensembles. (gray inside)[C#] Equivalent define en C#?
forcer l'exécution de 2 sous-ensemblesGCC define architecture
Probleme avec define : comment recuperer la chaine de la constante ?Pas de refresh sur un define dans un include ?
[PHP] Define ???[C++] les includes et les define fo les mettre ds le .hpp ou le . cpp?
Plus de sujets relatifs à : DEFINE ensembles


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