我想知道##
在此宏定义中的作用:
#define debug(M, ...) fprintf(stderr,M "\n",##__VA_ARGS __)
我用Google搜索了一个答案,然后提出了以下建议。
如果没有给宏提供变量参数,则##
将删除逗号。因此,如果宏是这样调用的
debug("message");
没有引号,它会扩展为
fprintf(stderr,"message");
不是
fprintf(stderr,"message",);
为什么要删除逗号?
答案 0 :(得分:0)
显然,这是gcc引入的一种非便携式语法,专门用于处理根本不传递任何参数的这种极端情况。 如果没有##,它会抱怨结尾逗号是语法错误。