在库中使用外部调试打印函数

  • 本文关键字:调试 打印 函数 外部 c
  • 更新时间 :
  • 英文 :


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

extern void mylib_func(void);

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

我实际上想在我的库中使用日志记录宏,但找不到一种方法来做到这一点,所以我添加了这样的东西:

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

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

我解决这个问题的唯一方法是使用需要va_listvprintf重写日志函数,这样我就可以做这样的事情:

void mylib_log(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
}

这并不理想,因为我希望这个函数的输出与我的LOG_DEBUG(fmt, ...)
相似,所以这可以工作,但我想知道是否有另一种方法?

如果我正确理解你的问题,我想你想做的就是这个。 首先,保留你的函数

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。

最新更新