宏定义中#与##
宏定义中的#
一般用法
例如
#define TOSTRING(s) #s
#将s转为字符串
#cinlude<stdio.h>
#define TOSTRING(s) #s
int main()
{
const char *p1 = TOSTRING(123);
const char *p2 = TOSTRING(abc);
printf("%s,\t %s", p1,p2);
getchar();
return 0;
}

下面来点复杂的
双重宏定义解析
#define TOSTRING(s) #s
#define STR(p) TOSTRING(p)
/**> 可读可写 */
#define R 1
#define W 2
#define RW 3
#define NRW 4
int main()
{
//STR(R) 解析成 TOSTRING(1)
//TOSTRING(1) 解析成 #1
//最后得到“1”
const char *p1 = STR(R);
const char *p2 = STR(W);
const char *p3 = STR(RW);
const char *p4 = STR(NRW);
printf("%s, %s, %s, %s", p1, p2, p3, p4);
getchar();
return 0;
}

本文深入探讨了C/C++预处理器中宏定义#与##的使用技巧,通过实例展示了如何将宏参数转换为字符串,以及如何进行双重宏定义解析。文章通过具体的代码示例,解释了这些操作符在实际编程中的应用。
702

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



