我在C中看到这一行:
#define log(format, args...) snprintf(buffer + strlen(buffer), 1023 - strlen(buffer), format, ##args);
在snprintf()
的最后一个参数之前,双磅/哈希意味着什么?
答案 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
)删除最终的逗号是空的。