函数调用中的参数前双重哈希
我在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__
)来删除最终的逗号。