跨平台日志macros不能在Windows上工作

我正在使用macros在不同的平台上进行简单的日志logging。 这里是我在android上使用的一些东西:

#include <android/log.h> #define __ENGINE_LOG_INFO(msg, argptr) __android_log_vprint(ANDROID_LOG_INFO, __ENGINE_LOG_TAG, msg, argptr); 

以下是我在Windows上尝试的相关信息:

 #elif defined _WIN32 || _WIN64 #include <stdarg.h> #include <stdio.h> #define __ENGINE_LOG_INFO(msg, argptr) printf ("%s:%s",__ENGINE_LOG_TAG,"DEBUG:"); printf(msg, argptr); printf("\n"); 

macros在这个函数中被调用:

 void LogManagerImpl::LogInfo(const char* msg, ...) { va_list argptr; va_start(argptr, msg); __ENGINE_LOG_INFO(msg, argptr); va_end(argptr); } 

例如,我使用它是这样的:

 engine->GetLogger()->LogInfo("TEST: MemoryManagerTest:AllocateWithMemPool: Loop time: %d msec", timeStop - timeStart); 

这在Android上运行良好,但由于某种原因,它似乎在Windows中打印虚假值(每次都是完全相同的值 – 一个非常大的值)。 我开始认为它看起来像一个地址,但我不知道为什么它不工作。 有任何想法吗?

你想用vprintf(msg, argptr); 而不是printf(msg, argptr); 在你的Windows版本。 vprintf()函数被设计为使用va_list类型作为实际参数值的容器,该值将与输入字符串中指示的值相匹配,其中printf()不是。