函数调用中的参数前双重哈希

我在C中看到这一行:

#define log(format, args...) snprintf(buffer + strlen(buffer), 1023 - strlen(buffer), format, ##args); 

双击/哈希在snprintf()的最后一个参数之前是什么意思?

在标准C中,“ ## ”用于在宏内将标记连接在一起。 这里,这个宏不是标准C,而是“Gnu C”,这是GCC实施的方言。 如果额外参数(在args )变为空,则“ ## ”用于删除逗号。 请参阅GCC手册 。

这是“令牌粘贴” 预处理器 操作符 ,我不认为宏正确使用它。

这是一个gcc扩展(如果变量参数列表args为空,那么args... ,C99版本将使用...__VA_ARGS__ )来删除最终的逗号。