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

Phi*_*lip 12 c c++ c-preprocessor

我在C中看到这一行:

#define log(format, args...) snprintf(buffer + strlen(buffer), 1023 - strlen(buffer), format, ##args);
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*nin 13

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

  • @Mark:为了他们的辩护,GCC人员在标准C中有任何这样的东西之前用可变数量的参数定义了他们的宏语法.两种语法都可以共存. (2认同)