macro: строковый литерал из char literal

Есть ли способ в C создать строковый литерал из символьного литерала, используя макрос?

например, у меня есть

'a' 

и я хочу создать строковый литерал

 "a" 

Чтобы прояснить вопрос:

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

Мой вопрос в том, как определить макрос CHAR2STRING

-Случайный комментарий к вопросу-

Это кажется невозможным. В качестве альтернативы может быть определен строковый литерал и вместо этого будет написан макрос STRING2CHAR :

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

или же

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

Выражение *"a" не является константой времени компиляции (поэтому, например, оно не может использоваться в качестве инициализатора для объекта с неавтоматической продолжительностью хранения, длиной массива не-VLA, меткой case или битовым полем width), хотя компиляторы должны иметь возможность оценить его во время компиляции (проверено с помощью Gcc и Clang).


Предлагается М Оем и Мэттом Макнаббом .

Не очень элегантный, но он работает:

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

Предполагает, что tgt имеет место для 2 символов. Может быть, вы могли бы привести пример, на что вы хотите, чтобы он выглядел?

Вы могли бы сделать

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

вы получите «a» вместо a, но, возможно, это нормально для вас.