GNU C 中支持三种形式的可变参宏定义,如下所示:
#define debug1(format, ...) fprintf (stderr, format, __VA_ARGS__)
#define debug2(format, args...) fprintf (stderr, format, args)
#define debug3(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
其中,当可变参列表为空时,需要使用第三种定义方式,如下所示:
debug1("%s:%d\n", __FILE__, __LINE__); // ok
debug2("%s:%d\n", __FILE__, __LINE__); // ok
debug3("%s:%d\n", __FILE__, __LINE__); // ok
debug1("debug1\n"); // error
debug2("debug2\n"); // error
debug3("debug3\n"); // ok