在库中使用外部调试打印功能

时间:2018-06-24 10:12:07

标签: c

我正在编写一个用于两个不同项目的库。 这两个项目使用不同的体系结构,并且库中的某些功能取决于体系结构。对于这种情况,我有一个头文件mylib_arch.h定义这些函数,如下所示:

extern void mylib_func(void);

然后在项目A和项目B中,我在mylib_arch.c中定义这些函数。到目前为止,一切都很好,除了日志功能。

我实际上想在我的库中使用一个日志记录宏,却找不到找到它的方法,所以我改为添加了以下内容:

extern void mylib_log(const char *fmt, ...);

现在在每个项目中,我都有一种不同的方式来显示/打印内容,但是两者都使用一个宏,因此无法使用这些宏定义mylib_log。

解决此问题的唯一方法是使用vprintf来重写va_list的log函数,这样我就可以执行以下操作:

void mylib_log(const char *fmt, ...)
{
     va_list args;

     va_start(args, fmt);
     vprintf(fmt, args);
     va_end(args);
}

这不是理想的选择,因为我希望该函数具有与我的LOG_DEBUG(fmt, ...)宏类似的输出
所以这可以工作,但我想知道是否还有另一种方法?

1 个答案:

答案 0 :(得分:0)

如果我正确地理解了您的问题,我想您想做的就是这个。 首先,保持功能

extern void mylib_log(const char *fmt, ...);

然后,添加第二个功能

extern void mylib_vlog(const char *fmt, va_list);

mylib_log函数与体系结构无关。您将拥有mylib_vlog的两个完全独立的实现,每个体系结构一个。最后,以明显的方式用mylib_log来写mylib_vlog。您甚至不需要任何宏或ifdefs。