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 次 |
| 最近记录: |