macro: littéral chaîne de littéral char

Existe-t-il un moyen en C de créer un littéral chaîne à partir d’un littéral caractère en utilisant une macro?

par exemple j’ai

'a' 

et je veux créer le littéral de chaîne

 "a" 

Pour clarifier la question:

 #define A 'a' write(fd, "x=" CHAR2STRING(A) "\n", 4); 

Ma question est de savoir comment définir la macro CHAR2STRING

–Résumé des commentaires à la question–

Cela semble impossible à réaliser. Alternativement, le littéral chaîne pourrait être défini et une macro STRING2CHAR être écrite à la place:

 #define A "a" #define STRING2CHAR(s) (*(s)) write(fd, "x=" A "\n", 4); putchar(STRING2CHAR(A)); 

ou

 #define A a #define XSTR(s) #s #define SYM2CHAR(sym) (*XSTR(sym)) #define SYM2STRING(sym) XSTR(sym) 

L’expression *"a" n’est pas une constante de compilation (elle ne peut par exemple pas être utilisée comme initialiseur pour un object avec une durée de stockage non automatique, une longueur de tableau non VLA, une étiquette de case ou un champ de bits width), mais les compilateurs devraient pouvoir l’évaluer au moment de la compilation (testé avec Gcc et Clang).


Proposé par M. Oehm et Matt McNabb .

Pas très élégant, mais ça marche:

 #define STRING_ME(tgt, ch) tgt[0]=ch;tgt[1]='\0' 

Suppose que tgt a un espace pour 2 caractères. Peut-être pourriez-vous donner un exemple de ce que vous voulez que ce soit?

Vous pourriez faire

 #define A 'a' #define X(macro) #macro #define CHAR2STRING(macro) X(macro) printf("%s\n", CHAR2STRING(A)); 

vous obtiendrez un “au lieu d’un”, mais peut-être que c’est bon pour vous.