-
#
:将宏参数转换为字符串,即将参数名转换为字符串字面值。例如:#define STR(x) #x STR(hello) // 输出 "hello"
-
##
:用于连接两个符号,将它们组合成一个符号。例如:#define CONCAT(x, y) x##y CONCAT(hello, world) // 输出 helloworld
-
__VA_ARGS__
##__VA_ARGS__
变参宏
__VA_ARGS__
用于将可变参数列表作为一个整体传递给宏。
例如,下面的宏定义可以将可变参数列表打印出来:#define PRINT(...) printf(__VA_ARGS__) 例子: PRINT("Hello, %s!", "world"); 将打印出: Hello, world!
##__VA_ARGS__
则用于在宏定义中处理可变参数列表的边界情况。当可变参数列表为空时,如果直接使用
__VA_ARGS__
,会导致编译错误。因此,可以使用
##
运算符将可变参数列表与前面的标记连接起来,从而避免这种情况. -
gcc 宏##args用法
#define debug(format, args…) printf(format, ##args)
与
##__VA_ARGS__
用法一样
【】C语言】【预处理命令】#、##、##__VA_ARGS_、##args_
于 2023-08-28 16:00:21 首次发布