# 预定义的宏
注意:不同的编译器宏的名称可能不同。
__func__
所在函数名__FILE__
所在文件名__LINE__
所在行数__DATE__
当前源文件的编译时间- ``
# #操作符
- #x 用来把参数转换成字符串
- a##b 将两个单独的符号合并成一个,且该符号必须是有效的。
## __VA_ARGS__
这里##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错
#define __T(x) L ## x // 如果x是字符串 "abc" 则__T(x) 相当于 L"abc"
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
int main()
{
paster(9); // 输出 token9 = 9
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 多行宏
对于复杂的多行宏。推荐的写法为
#define some_marco()\
do {\
contents\
} while (0)
1
2
3
4
2
3
4