C 中可变参数如何直接传递到 printf()

XIVN1987 · 2024-11-12 17:41:03 · 734 次点击

用到一个库,,它有一个接口函数如下:

/**
 * @brief     interface print format data
 * @param[in] fmt is the format data
 * @note      none
 */
void ofshex640_interface_debug_print(const char *const fmt, ...)
{
}

这个函数的函数原型与 printf 完全一致,,所以我想像下面这样直接把它的参数传递给 printf ,,可是编译器报错,,请问应该怎么改??

void ofshex640_interface_debug_print(const char *const fmt, ...)
{
	printf(fmt, ...);
}
举报· 734 次点击
登录 注册 站外分享
6 条回复  
654656413245 初学 2024-11-12 17:52:45
printf(fmt, __VA_ARGS__);
geelaw 小成 2024-11-12 17:58:21
关键词:vprintf
XIVN1987 楼主 小成 2024-11-12 18:43:58
@geelaw 下面这样确实可以,,不过感觉还是不够简洁、直接。。 ``` C void of640_interface_debug_print(const char *const fmt, ...) { va_list args; va_start(args, fmt); vprintf(fmt, args); va_end(args); } ```
llxvs 小成 2024-11-12 19:14:42
@XIVN1987 C 不是一門簡潔、直接的語言
julyclyde 小成 2024-11-12 19:19:01
@XIVN1987 这就是标准做法
geelaw 小成 2024-11-12 19:41:21
@XIVN1987 #3 好像可变参数本身就不是简洁直接的东西。 另外这也提示你应该把实现放在 void v_of460_interface_debug_print(char const *fmt, va_list arg); 里面,并在可变参数版本里调用它。 请注意,如果这个函数本身需要在 vprintf 之外操作可变参数列表,需要 va_copy 之,否则行为不确定。
返回顶部