eya*_*alm 10 gcc stringification c-preprocessor
我想创建一个C预处理器宏,它将引用该参数.就像常用的一样#X
.
我想Q(A)
扩大到'A'
.
我在Linux上使用gcc.
有人有想法吗?
我知道#
双引号.我正在寻找一种类似的单引号机制.
ken*_*ytm 14
你能做的最好的就是
#define Q(x) ((#x)[0])
Run Code Online (Sandbox Code Playgroud)
要么
#define SINGLEQUOTED_A 'A'
#define SINGLEQUOTED_B 'B'
...
#define SINGLEQUOTED_z 'z'
#define Q(x) SINGLEQUOTED_##x
Run Code Online (Sandbox Code Playgroud)
这仅适用于a
- z
,A
- Z
,0
- 9
和_
(以及$
某些编译器).
实际上,#X
双引用其参数,正如您可以使用以下代码看到的那样.
#define QQ(X) #X
char const * a = QQ(A);
Run Code Online (Sandbox Code Playgroud)
运行此命令gcc -E
(仅查看预处理器输出)以查看
# 1 "temp.c"
# 1 "<built-n>"
# 1 "<command line>"
# 1 "temp.c"
char * a = "A"
Run Code Online (Sandbox Code Playgroud)
单引号你的参数(在C中表示它是单个字符)使用下标
#define Q(X) (QQ(X)[0])
char b = Q(B);
Run Code Online (Sandbox Code Playgroud)
这将转化为
char b = ("B"[0]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4038 次 |
最近记录: |