我们使用 #
把宏参数变为一个字符串
用 ##
把两个宏参数贴合在一起。
1、##(宏连接)
#define CONS(a,b) int(a##e##b)
printf("%d\n", CONS(2,3)); // 2e3 输出:2000
2、#(字符串化)
- 我们使用
#
把宏参数变为一个字符串
#define STR(s) #s
printf(STR(vck)); // 输出字符串"vck"
- 注意:如果
#
的参数是一个宏,那么这个宏不会被替换,而是直接将这个宏转换为字符串型。
如下
#include<stdio.h>
#define A B
#define B C
#define C D
#define _str_1(X) #X
// 一般会设置此中间层,在这一步中,X若是宏的话会被转成宏值,下一步执行_str_1() 才会被转成字符串
#define _str(X) _str_1(X)
int main(int argc, char** argv)
{
puts(_str(A));
puts(_str_1(A));
return 0;
}
运行结果
D
A
- 结论:
1、不论一个宏 X
内嵌套了多少层宏,在_str(X)
转换为_str_1(X)
这一步中,X
都能一步到位,变为最终
值,然后在通过#
字符串化。
2、如果#
的参数是一个宏,那么这个宏不会被替换,而是直接将这个宏转换为字符串型。
3、代码块第8行。