【发布时间】:2011-10-24 18:25:24
【问题描述】:
我在 C 中看到这一行:
#define log(format, args...) snprintf(buffer + strlen(buffer), 1023 - strlen(buffer), format, ##args);
snprintf() 中最后一个参数之前的双磅/哈希是什么意思?
【问题讨论】:
标签: c++ c c-preprocessor
我在 C 中看到这一行:
#define log(format, args...) snprintf(buffer + strlen(buffer), 1023 - strlen(buffer), format, ##args);
snprintf() 中最后一个参数之前的双磅/哈希是什么意思?
【问题讨论】:
标签: c++ c c-preprocessor
在标准 C 中,“##”用于在宏中将标记连接在一起。在这里,这个宏不是在标准 C 中,而是在“Gnu C”中,由GCC 实现的方言。如果额外的参数(args)结果为空,则“##”用于删除逗号。见the GCC manual。
【讨论】:
那是"token-pasting"preprocessoroperator,我认为这个宏没有正确使用它。
【讨论】:
这是一个 gcc 扩展(args... 也是如此,C99 版本是使用... 和__VA_ARGS__)如果变量参数列表args 为空,则删除最后的逗号。
【讨论】: