C语言-不定长参数宏

本文最后更新于:1 年前

C 语言中 VA_ARGS 是一个可变参数的宏,是新的 C99 规范中新增的,需要配合 define 使用,总体来说就是将左边宏中 … 的内容原样抄写在右边 VA_ARGS 所在的位置。

一个不定长参数

#define MY_PRINT(...) hesy_print(__VA_ARGS__)

一个固定参数和一个不定长参数

#define MY_PRINT(fmt, ...) hesy_print(fmt, ##__VA_ARGS__)

如果可变参数被忽略或为空,## 操作将使预处理器(preprocessor)去除掉它前面的那个逗号

可用于C语言下设置默认参数

示例

1
2
3
#define print_LOG(level, fmt, ...) printf("[%s][%d]"fmt"\n", __FUNCTION__, __LINE__, ##__VA_ARGS__)

#define print_LOG(level, fmt, args...) SYS_LOG("[WIFI]", level, fmt, ##args)