宏定义
'#' 和 '##'
'#'号(将符号转为字符串)
这条定义中,定义了一个 PRINT 的宏函数
预处理器遇到这样的宏,会将 #a 替换成以字符串表示的参数 a
例如:
'##'号(连接符:将2个表达式连接到一起)
预处理器会将这2条宏扩展成下面的代码
我们可以看到:这2条宏定义其实就是定义了2个成员变量
宏跨行定义(通常在一行中,多行宏定义,使用 \ 连接)===> set / get
预处理器将宏展开后,它的展开形式就是这样的,
这个宏的定义就是定义一个 私有成员变量,和它的 get 和 set 方法
预定义的宏(通常用于调试语句)
例如:这个代码打印了当前源文件的基本信息
可变参的宏函数(最后一个参数是省略号)
实现格式化的日志输出功能