[C] #define dans une chaine de caracteres

#define dans une chaine de caracteres [C] - C - Programmation

Marsh Posté le 04-08-2007 à 13:58:44    

Salut,
 

Code :
  1. #define CHAINE super chaine de caracteres !
  2.                    ...
  3. printf("ceci est une CHAINE" );


 
ne fonctionne pas puisque qu'affiche: ceci est une CHAINE et non ceci est une super chaine de caracteres !
 
Comment résoudre ce probleme sachant que je veux asbosument utiliser des #define et qu'ils ne contiennt pas de ", donc pas de #define CHAINE "super chaine de caracteres !"
Je pensais construire le chaine a coup de strcpy et strcat mais y'a pas plutot un moyen "syntaxique" du language ? ca serait plus simple.


Message édité par cimourdain le 04-08-2007 à 13:59:22
Reply

Marsh Posté le 04-08-2007 à 13:58:44   

Reply

Marsh Posté le 04-08-2007 à 14:02:42    

Code :
  1. #define CHAINE "super chaine de caracteres !"
  2.                    ...
  3. printf("ceci est une " CHAINE " (qui peut continuer ici)" );


 
Edit: Arf, et sinon c'est impossible sans les guillemets dans le define. Sérieux, pourquoi un tel délire ?


Message édité par tpierron le 04-08-2007 à 17:34:21
Reply

Marsh Posté le 04-08-2007 à 19:28:48    

non mais c'est bon tpierron ta méthode me convient très bien, je savais pas que le C permettait ce genre de syntaxe pour concatener des chaines !

Reply

Marsh Posté le 04-08-2007 à 19:32:49    

J'avais posté un truc mais en fait c'est un poil plus compliqué. Voilà la bonne solution :
 
Il faut utiliser "#" pour transformer la macro en chaine de caractères. Il faut aussi deux niveaux de macros pour expanser la macro avant de la stringifier :

Code :
  1. #include <stdio.h>
  2. #define CHAINE super chaine de caracteres !
  3. #define xstr(s) str(s)
  4. #define str(s) #s
  5. int
  6. main()
  7. {
  8.         puts("ceci est une " xstr(CHAINE) " (qui peut continuer ici)" );
  9.         return 0;
  10. }

Reply

Marsh Posté le 04-08-2007 à 19:35:04    

je comprends pas ca:
 
 
#define xstr(s) str(s)
 
#define str(s) #s
 
que signifie ce #s ?

Reply

Marsh Posté le 04-08-2007 à 19:35:42    

cimourdain, la méthode de tpierron demande que la macro soit entre double quotes, ce que, d'après ce que tu as écrit, tu ne peux pas te permettre.

Reply

Marsh Posté le 04-08-2007 à 19:36:05    

Reply

Marsh Posté le 04-08-2007 à 19:43:21    

matafan a écrit :

cimourdain, la méthode de tpierron demande que la macro soit entre double quotes, ce que, d'après ce que tu as écrit, tu ne peux pas te permettre.


 
ben en fait, dans ces conditions, si !

Reply

Sujets relatifs:

Leave a Replay

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