我们使用 # 把宏参数变为一个字符串
用 ## 把两个宏参数贴合在一起。
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行。
本文详细介绍了C语言预处理器中的##和#宏操作符的使用。##用于连接两个宏参数,例如CONS(2,3)生成2e3;#则将宏参数转换为字符串,如STR(vck)输出字符串vck。当#操作符作用于包含宏定义的参数时,宏不会展开,而是直接转化为字符串。示例代码展示了宏展开和字符串化的不同效果,强调了宏在处理字符串和拼接时的特性。
1403

被折叠的 条评论
为什么被折叠?



