将 C printf() 调用包装在预处理器指令中

Eng*_*999 3 c printf wrapper c-preprocessor preprocessor-directive

我正在尝试将 C 代码从一个平台移植到另一个平台并删除依赖项。

有一个名为的调试函数dbg_out,它打印出类似printf().

原型是void dbg_out(int dbgMask, const char *pFormat, ...);

这是一个调用示例:dbg_out((5, "SerialDriver : (%04x-%08lx) \n", id, sn));

我想将此函数映射到正常printf()调用,但遇到一些问题。

到目前为止我已经尝试过了

void dbg_out (int dbgMask, const char *pFormat, ...)
__attribute__((format(printf, 2, 3)))
;    
Run Code Online (Sandbox Code Playgroud)

我需要忽略第一个参数 dbgMask 并只考虑其他参数。

我更喜欢使用预处理器来定义包装器。我希望得到一些帮助。

Cy-*_*4AH 5

您需要使用 usevprintf来代替,以便能够使用未知参数

inline void dbg_out (int dbgMask, const char *pFormat, ...) {
  va_list ptr;
  va_start(ptr, pFormat);
  vprintf(pFormat, ptr);
  va_end(ptr);
}
Run Code Online (Sandbox Code Playgroud)