2012-02-10 31 views
2

我正在使用宏在不同平臺上進行簡單日誌記錄。下面是一些什麼,我在Android上使用:跨平臺日誌宏不能在windows上工作

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

這裏是我在Windows嘗試corresonding:

#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"); 

宏在這個函數中調用:

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中打印虛假值(每次都是完全相同的值 - 一個非常大的值)。我開始認爲它看起來像一個地址,但我不知道爲什麼它不工作。有任何想法嗎?

回答

2

你想在你的Windows版本中使用vprintf(msg, argptr);而不是printf(msg, argptr);。​​函數被設計爲與va_list類型一起使用作爲實際參數值的容器,該值將與輸入字符串中指示的值相匹配,因爲printf()不是。