gpt4 book ai didi

c - 使用库中的外部调试打印函数

转载 作者:行者123 更新时间:2023-11-30 20:31:26 24 4
gpt4 key购买 nike

我正在编写一个用于两个不同项目的库。这两个项目都使用不同的体系结构,并且库中的某些功能依赖于体系结构。对于这种情况,我有一个 header 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 的形式以显而易见的方式编写的。您甚至不需要任何宏或 ifdef。

关于c - 使用库中的外部调试打印函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51008898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com