Я хотел бы создать макрос препроцессора C, который будет одинарная кавычка аргумент. Точно так же, как обычно используемое #X
.
Я хочу Q(A)
быть расширенным до 'A'
.
Я использую gcc на Linux.
У кого-либо есть идея?
Я знаю #
двойные кавычки. Я ищу подобный механизм для единственного заключения в кавычки.
Лучшее, что вы можете сделать, это
#define Q(x) ((#x)[0])
или
#define SINGLEQUOTED_A 'A'
#define SINGLEQUOTED_B 'B'
...
#define SINGLEQUOTED_z 'z'
#define Q(x) SINGLEQUOTED_##x
Это работает только для a
-z
, A
-Z
, 0
-9
и _
(и $
для некоторых компиляторов).
На самом деле, #x
Дважды цитирует свой аргумент, как вы можете видеть со следующим кодом.
#define QQ(X) #X
char const * a = QQ(A);
Запустите это с GCC -E
(просто увидеть вывод препроцессора), чтобы увидеть
# 1 "temp.c"
# 1 "<built-n>"
# 1 "<command line>"
# 1 "temp.c"
char * a = "A"
для одиночного цитата вашего аргумента (который в C означает, что это один символ), используйте подписку
#define Q(X) (QQ(X)[0])
char b = Q(B);
, которые будет преобразован в
char b = ("B"[0]);
Лучшее я могу думать о бы
#define Q(A) (#A[0])
, но это не очень красиво, по общему признанию.