gpt4 book ai didi

c - 如何将 printf() 包装到函数或宏中?

转载 作者:太空狗 更新时间:2023-10-29 16:23:32 26 4
gpt4 key购买 nike

这听起来像是一道面试题,但实际上是一个实际问题。

我正在使用一个嵌入式平台,并且只有这些功能的等价物可用:

  • 打印函数()
  • snprintf()

此外,printf()实现(和签名)在不久的将来可能会发生变化,因此对它的调用必须驻留在单独的模块中,以便以后轻松迁移。

鉴于此,我可以将日志记录调用包装在某些函数或宏中吗?目标是我的源代码调用 THAT_MACRO("Number of bunnies: %d", numBunnies);在一千个地方,但只能在一个地方看到对上述函数的调用。

编译器:arm-gcc -std=c99

编辑:只是提一下,但在 2000 年最佳实践之后,可能更早,出于多种原因,内联函数比宏好得多。

最佳答案

有两种方法可以做到这一点:

  1. 可变宏

    #define my_printf(...) printf(__VA_ARGS__)
  2. 转发va_args的函数

    #include <stdarg.h>
    #include <stdio.h>

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

还有vsnprintfvfprintf 以及您在stdio 中能想到的任何东西。

关于c - 如何将 printf() 包装到函数或宏中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20639632/

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