我正在编写一个用于两个不同项目的库。 这两个项目都使用不同的体系结构,并且库中的某些函数依赖于体系结构。对于这种情况,我有一个标头 mylib_arch.h 定义这些函数,如下所示:
extern void mylib_func(void);
然后在项目 A 和项目 B 中,我在 mylib_arch.c 中定义这些函数。到目前为止一切顺利,除了日志记录功能。
我实际上想在我的库中使用日志记录宏,但找不到一种方法来做到这一点,所以我添加了这样的东西:
extern void mylib_log(const char *fmt, ...);
现在在每个项目中,我都有一种不同的方法来显示/打印内容,但两者都使用宏,因此我无法使用这些宏定义mylib_log。
我解决这个问题的唯一方法是使用需要va_list
的vprintf
重写日志函数,这样我就可以做这样的事情:
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。