C+中的可变宏+;没有按预期工作 我试图允许Primff()在我的C++应用程序中调用日志函数。我发现这很好地解释了我想做什么。然而,我没有运气让这个概念在我的应用程序中按预期工作。我将其缩小,直到我可以得到一个简单的最小程序来演示问题,结果如下: #include <stdarg.h> #include <stdio.h> #define logEvent(severity, TAG, fmt, ...) _log_proxy(severity, TAG, fmt"\n", ##__VA_ARGS__) #define log_level_t int void _log_proxy(log_level_t severity, const char * TAG, const char *fmt, ...) __attribute__((format (printf, 3, 4))); int main (int argc, const char * argv[]) { logEvent(1, "TAG", "This is plain text."); logEvent(1, "TAG", "This is a number: %d.", 12); logEvent(1, "TAG", "This is a string: %s.", "heebiejeebie"); return 0; } void _log_proxy(log_level_t severity, const char * TAG, const char *fmt, ...) { va_list arg; va_start(arg, fmt); printf(fmt, arg); va_end(arg); } #包括 #包括 #定义日志事件(严重性、标记、fmt…)\u日志\u代理(严重性、标记、fmt“\n”、#VA_参数) #定义日志级别int 无效日志代理(日志级别严重性、常量字符*标记、常量字符*fmt等) __属性(格式(printf,3,4)); int main(int argc,const char*argv[]{ logEvent(1,“标记”,“这是纯文本”); logEvent(1,“标记”,“这是一个数字:%d.”,12); logEvent(1,“标记”,“这是一个字符串:%s.”,“heebiejeebie”); 返回0; } 无效日志代理(日志级别严重性、常量字符*标记、常量字符*fmt等){ va_列表参数; va_启动(arg、fmt); printf(fmt,arg); va_端(arg); }

C+中的可变宏+;没有按预期工作 我试图允许Primff()在我的C++应用程序中调用日志函数。我发现这很好地解释了我想做什么。然而,我没有运气让这个概念在我的应用程序中按预期工作。我将其缩小,直到我可以得到一个简单的最小程序来演示问题,结果如下: #include <stdarg.h> #include <stdio.h> #define logEvent(severity, TAG, fmt, ...) _log_proxy(severity, TAG, fmt"\n", ##__VA_ARGS__) #define log_level_t int void _log_proxy(log_level_t severity, const char * TAG, const char *fmt, ...) __attribute__((format (printf, 3, 4))); int main (int argc, const char * argv[]) { logEvent(1, "TAG", "This is plain text."); logEvent(1, "TAG", "This is a number: %d.", 12); logEvent(1, "TAG", "This is a string: %s.", "heebiejeebie"); return 0; } void _log_proxy(log_level_t severity, const char * TAG, const char *fmt, ...) { va_list arg; va_start(arg, fmt); printf(fmt, arg); va_end(arg); } #包括 #包括 #定义日志事件(严重性、标记、fmt…)\u日志\u代理(严重性、标记、fmt“\n”、#VA_参数) #定义日志级别int 无效日志代理(日志级别严重性、常量字符*标记、常量字符*fmt等) __属性(格式(printf,3,4)); int main(int argc,const char*argv[]{ logEvent(1,“标记”,“这是纯文本”); logEvent(1,“标记”,“这是一个数字:%d.”,12); logEvent(1,“标记”,“这是一个字符串:%s.”,“heebiejeebie”); 返回0; } 无效日志代理(日志级别严重性、常量字符*标记、常量字符*fmt等){ va_列表参数; va_启动(arg、fmt); printf(fmt,arg); va_端(arg); },c++,variadic,C++,Variadic,我发现格式字符串的参数在printf()调用中被打印为乱码。我很确定我做错了一件很简单的事,我只是不知道那件很简单的事是什么。任何帮助都将不胜感激。将printf()替换为接受va_列表参数的 printf( char* string , ... ) vprintf( char* string , va_list list ) 将printf()替换为采用va_列表参数的 printf( char* string , ... ) vprintf( char* string , va_lis

我发现格式字符串的参数在printf()调用中被打印为乱码。我很确定我做错了一件很简单的事,我只是不知道那件很简单的事是什么。任何帮助都将不胜感激。

printf()
替换为接受
va_列表
参数的

printf( char* string , ... )

vprintf( char* string , va_list list )
printf()
替换为采用
va_列表
参数的

printf( char* string , ... )

vprintf( char* string , va_list list )

您想调用
vprintf
而不是
printf


printf
va_列表
解释为一个参数,打印乱码(或其他未定义的行为)。

您想调用
vprintf
而不是
printf

printf
va\u列表
解释为一个参数,打印乱码(或其他未定义的行为)。

\u log\u proxy
是一个。