1、一般用法:
# 把宏参数变为一个字符串,
#@ 把宏参数变为一个字符,
## 把两个宏参数贴合在一起。
#include <stdio.h>
#include <limits.h>
#define STR(s) #s // #与参数之间可以有空格
#define TOCHAR(c) #@c
#define CONS(a,b) int(a##e##b) // ##与参数之间可以有空格
int main(void)
{
printf(STR(pele)); // 输出字符串 "pele"
printf("%c\n", TOCHAR(z)); // 输出字符z
printf("%d\n", CONS(2,3)); // 2e3 输出:2000
return 0;
}
2、当宏参数是另一个宏的时候
#define A (2)
#define _STR(s) #s
#define STR(s) _STR(s) // 转换宏
#define _CONS(a,b) int(a##e##b)
#define CONS(a,b) _CONS(a,b) // 转换宏
printf("int max: %s\n", STR(INT_MAX));
输出为:
int max: 0x7fffffff
STR(INT_MAX)-->_STR(0x7fffffff)-->"0x7fffffff"
# 把宏参数变为一个字符串,
#@ 把宏参数变为一个字符,
## 把两个宏参数贴合在一起。
#include <stdio.h>
#include <limits.h>
#define STR(s) #s // #与参数之间可以有空格
#define TOCHAR(c) #@c
#define CONS(a,b) int(a##e##b) // ##与参数之间可以有空格
int main(void)
{
printf(STR(pele)); // 输出字符串 "pele"
printf("%c\n", TOCHAR(z)); // 输出字符z
printf("%d\n", CONS(2,3)); // 2e3 输出:2000
return 0;
}
2、当宏参数是另一个宏的时候
#define A (2)
#define _STR(s) #s
#define STR(s) _STR(s) // 转换宏
#define _CONS(a,b) int(a##e##b)
#define CONS(a,b) _CONS(a,b) // 转换宏
printf("int max: %s\n", STR(INT_MAX));
输出为:
int max: 0x7fffffff
STR(INT_MAX)-->_STR(0x7fffffff)-->"0x7fffffff"