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

时间:2011-10-24 18:25:24

标签: c++ c c-preprocessor

我在C中看到这一行:

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

snprintf()的最后一个参数之前,双磅/哈希意味着什么?

3 个答案:

答案 0 :(得分:13)

在标准C中,“##”用于在宏内连接令牌。这里,这个宏不在标准C中,而在“Gnu C”中,由GCC实现的方言。如果额外参数(在##中)变为空,则“args”用于删除逗号。请参阅the GCC manual

答案 1 :(得分:2)

这是"token-pasting" preprocessor operator,我不认为宏正确使用它。

答案 2 :(得分:1)

如果变量参数列表args...,这是gcc扩展名(...也是如此,C99版本将使用__VA_ARGS__args)删除最终的逗号是空的。