相关疑难解决方法(0)

C99中带有0个参数的变量宏

我有一些调试代码如下所示:

#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__)
Run Code Online (Sandbox Code Playgroud)

使用最后一个宏,因此我可以将位置插入到调试输出中,以确定错误发生的位置.但是,当我调用这样的函数时:

my_error("Uh oh!");
Run Code Online (Sandbox Code Playgroud)

喜欢我的代码是C99,所以我觉得这个时候编译,我得到以下错误:

error: ISO C99 requires rest arguments to be used
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过改变呼叫来解决这个问题

my_error("Uh oh!", NULL);
Run Code Online (Sandbox Code Playgroud)

但有什么方法可以让这个看起来不那么难看?谢谢!

macros c99 variadic

10
推荐指数
1
解决办法
7720
查看次数

标签 统计

c99 ×1

macros ×1

variadic ×1