我正在编写一个用于两个不同项目的库。 这两个项目使用不同的体系结构,并且库中的某些功能取决于体系结构。对于这种情况,我有一个头文件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, ...)
宏类似的输出
所以这可以工作,但我想知道是否还有另一种方法?
答案 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。