2009-08-19 9 views
1

Est-il possible de stringify un caractère dans une macro préprocesseur sans elle, y compris la (') sstringificaton préprocesseur d'un caractère

exemple:

#define S(name, chr) const char * name = #name chr 
utilisation

:

S(hello, 'W'); //should expand to 'const char * hello = "helloW" 

Merci un groupe !, Andrew

+1

Et pourquoi vous voulez faire cela? : | – GManNickG

Répondre

9

Vous n'avez pas besoin de, car en C adjace Les constantes de chaîne nt sont fusionnées.

ie.

const char *hello = "hello" "W"; 

est équivalent à

const char *hello = "helloW"; 

de sorte que votre macro en cours est très bien - il suffit de l'appeler comme ceci:

S(hello, "W"); 
+0

+1 Note latérale - c'est le préprocesseur C qui fusionne les littéraux de chaîne adjacents – qrdl

+1

+1. @grdl: vous avez tort. Vérifiez avec cpp en cours d'exécution sur cette macro, il ne fusionne pas les littéraux adjacents, c'est le compilateur qui le fait. –

9

Voici trois façons. Aucun char utiliser une seule cité, bien que:

#include <iostream> 

#define S1(x, y) (#x #y) 
#define S2(x, y) (#x y) 
#define S3(x, y) (x y) 

int main(void) 
{ 
    std::cout << S1(hello, W) << std::endl; 
    std::cout << S2(hello, "W") << std::endl; 
    std::cout << S3("hello", "W") << std::endl; 
}; 

Tous les résultats:

hellow

Questions connexes