-
#:将宏参数转换为字符串,即将参数名转换为字符串字面值。例如:#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 首次发布
本文介绍了宏编程中的关键技术,如如何将宏参数转换为字符串,使用CONCAT宏连接符号,以及处理可变参数列表(如__VA_ARGS__)的应用实例,包括GCC宏中的##args用法和处理空参数列表的技巧。
5404

被折叠的 条评论
为什么被折叠?



