2012-02-10 8 views
2

異なるプラットフォームで簡単にログを記録するためにマクロを使用しています。クロスプラットフォームのログマクロがウィンドウで機能しない

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

そして、ここで私はWindows上で試してみたcorresondingだ:ここで私はAndroid上で使用しているものの一部だ

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

たとえば、私はこれを次のように使用します:

これはAndroidでもうまくいきますが、何らかの理由でWindowsで偽の値を表示しているようです(毎回同じ値 - 非常に大きな値です)。私はそれが住所のように見えると思うようになっていますが、なぜそれが機能していないのか分かりません。何か案は?

答えて

2

Windows版でprintf(msg, argptr);ではなくvprintf(msg, argptr);を使用します。​​関数は、va_list型を入力文字列に指定された値と一致する実際の引数値のコンテナとして使用するように設計されています。-asはprintf()ではありません。

関連する問題