Macro : renvoyer une chaîne avec une virgule

Résolu
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 6 févr. 2009 à 16:27
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 6 févr. 2009 à 17:37
Salut,

Je cherche désespérément à faire une macro qui renverrait une chaîne comprenant deux éléments séparés par une virgule.

printf(TO_STRING(a, b));
-> printf("a, b");

Celle-ci fonctionnerait très bien s'il n'y avait pas la virgule :
#define TO_STRING(val) #val

Je sais que je dispose de # pour faire une chaîne à partir d'un argument de macro, de ## pour concaténer deux arguments de macro, que les arguments sont évalués avant la substitution sauf si on utilise # ou ##... Et pourtant non je ne vois pas de solution à ce casse tête. On utilise parfois des parenthèses pour gérer les , mais je ne vois pas comment faire dans mon cas. Je ne veux pas "(a, b)". Par contre ("a, b") ne me dérangerait pas.

(
L'objectif au final étant de faire du code asm inline portable.

BEGIN_ASM
ASM(mov eax, 2)
END_ASM

Sous VC ->
__ams {
mov eax, 2
}

Sous gcc ->
__asm__ __volatile__ (".intel_syntax noprefix");
__asm__ __volatile__ ("mov eax, 2");
__asm__ __volatile__ (".att_syntax prefix");
)

Merci d'avance.

3 réponses

gaspos Messages postés 17 Date d'inscription jeudi 9 décembre 2004 Statut Membre Dernière intervention 20 février 2009
6 févr. 2009 à 17:23
fastoche !

#define

TO_STRING
(

a
,
b

)
#
a
","
#
b
et voilà :

printf( TO_STRING( 321,qsd )) ; // affiche "321,qsd"

Hadrien
3
gaspos Messages postés 17 Date d'inscription jeudi 9 décembre 2004 Statut Membre Dernière intervention 20 février 2009
6 févr. 2009 à 17:25
il faut lire :

TO_STRING(

a
,
b

)
#
a
","
#
b

ce gros nigaud d'éditeur a fait sauter mon retour à ligne...
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
6 févr. 2009 à 17:37
Alors là je dis superbe. Merci gaspos !
0
Rejoignez-nous