Bonjour,

J'utilise une macro dans laquelle j'ai besoin de concatener des chaines, ce que je fais sans probleme avec le token ##. Mon soucis est que si j'insere le caractere : (ou :: ) dans ma macro, il m'insere un retour a la ligne avant ce caractere, ce qui fout la grouille :

Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
#define MA_MACRO(type, explain)      \ 
{                                                       \
        #type "_fmt",                                   \
        name_strings::##type##_fmt,                      \
        "Specify the format of " explain                \
}

Mon soucis est au niveau de "name_strings::", qui donne la sortie suivante apres le passage du pre-processeur :

Appel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
        MA_MACRO(client_stub,  "client stub names");
Sortie du pre-processeur (gcc -E ......)
{ "client_stub" "_fmt", name_strings
::client_stub_fmt
, "Specify the format of " "client stub names" }
Est-ce que quelqu'un saurait comment je peux faire pour ne pas qu'il insere un espace avant les :: ? Sachant que le probleme se produit avec n'importe quel signe de ponctuation...
Ce que je souhaite obtenir (et c'est ce que j'obtiens si je supprime les :: ) :

{ "client_stub" "_fmt", name_strings::client_stub_fmt
, "Specify the format of " "client stub names" }
En esperant avoir ete clair, et en vous remerciant par avance