Macro : renvoyer une chaîne avec une virgule [Résolu]

Signaler
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
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

Messages postés
17
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
20 février 2009

fastoche !

#define

TO_STRING
(

a
,
b

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

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

Hadrien
Messages postés
17
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
20 février 2009

il faut lire :

TO_STRING(

a
,
b

)
#
a
","
#
b

ce gros nigaud d'éditeur a fait sauter mon retour à ligne...
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Alors là je dis superbe. Merci gaspos !