我有一些调试代码,如下所示:
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define AT __FILE__ ":" TOSTRING(__LINE__)
void __my_error(const char*loc, const char *fmt, ...);
#define my_error(fmt, ...) __my_error(AT, fmt, ##__VA_ARGS__)
使用了最后一个宏,因此我可以将该位置插入到调试输出中,以了解错误发生的位置。但是,当我这样调用函数时:
my_error("Uh oh!");
我希望我的代码是 C99,所以我发现当它编译时,我收到以下错误:
error: ISO C99 requires rest arguments to be used
我知道我可以通过将调用更改为
my_error("Uh oh!", NULL);
但是有什么办法可以让这看起来不那么难看吗?谢谢!