C/C++ define宏定义中特殊操作符的用法

C/C++通过 #define 命令定义一个宏,即用一个标识符来标识一个字符串,也称为“宏”。

#define HELLO 666

这样HELLO就是定义为666,所有用到HELLO的地方,在预处理时都会被替换为666。

使用 define 定义宏的基本用法见:C语言用#define定义宏的用法

这里主要介绍下宏定义中的特殊操作符,包括:#、##、... 和 __VA_ARGS__。

1、字符串化操作符 #

当需要把宏的参数 x 转换为字符串时,使用 #x 可以把参数名 x 转换成相应的字符串,该过程称为字符串化。

2、标记粘贴操作符 ##

标记粘贴运算符(##)可以合并宏中的两个标识符,即把宏定义中两个独立的标识符合并为一个标识符。

3、可变参数宏 ... 和 __VA_ARGS__

__VA_ARGS__ 是一个可变参数宏,与省略号 ... 配合使用,用来替换省略号所代表的字符串。

需要注意的是,省略号 ... 只能放在宏参数列表中的末尾。

在实际应用中,上面几个特殊操作符经常用于日志的分级处理,还有下面几个宏:

  • __FILE__:当前源文件名称;
  • __LINE__:当前行号;
  • __FUNCTION__:当前函数名称。
原文链接:,转发请注明来源!