[英]printf inside variadic function prints garbage
我正在尝试创建一个可自定义的调试库,以便我可以在外部声明我的调试 function 并将其作为回调设置到库中,这样其他库就可以在不知道这些回调是如何定义的情况下调用此调试函数。
我的 debug.c 文件包含以下摘录:
// NOTE: type defined in .h as: typedef void(*debug_custom_callback_t)(const char *format, ...);
debug_custom_callback_t debug_custom_callback[DEBUG_NUM_CALLBACKS];
void debug_log_printf(uint8_t idx, const char *format, ...){
va_list args;
// callback exists
if(debug_custom_callback[idx]){
va_start(args, format);
debug_custom_callback[idx](format, args);
va_end(args);
}
}
void debug_set_callback(uint8_t idx, debug_custom_callback_t callback){
//callback assigning
if(callback && idx < DEBUG_NUM_CALLBACKS)
debug_custom_callback[idx] = callback;
}
这个库有自己的 makefile,所以它可以编译为 aa lib,并在主代码的 makefile 中与 -l 标志链接。
主要代码使用调试库如下:
...
//main code
uint8_t test = 0xFF;
debug_set_callback(0, main_printf);
debug_log_printf(0, "Testing %d %d\n", test, 1); // prints: Testing -1095376668 -1225391600
...
//Definition of main_printf
void main_printf(const char *format, ...){
va_list args;
va_start(args, format);
printf(format, args);
va_end(args);
}
但这不能正常工作。 字符串打印正确,但我尝试打印的任何值都打印为垃圾。 如您所见,即使是常量也打印得很糟糕。
我错过了什么?
先感谢您。
请改用vprintf
。
void main_printf(const char *fmt, va_list args) {
vprintf(fmt, args);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.