android - 跨平台日志宏在 Windows 上不起作用

标签 android c++ windows logging printf

我正在使用宏在不同平台上进行简单的日志记录。以下是我在 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");

在此函数中调用宏:

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 中打印虚假值(每次都是完全相同的值 - 一个非常大的值)。我开始认为它看起来像一个地址,但我不确定为什么它不起作用。有什么想法吗?

最佳答案

您希望在 Windows 版本中使用 vprintf(msg, argptr); 而不是 printf(msg, argptr);vprintf() 函数设计为使用 va_list 类型作为实际参数值的容器,这些值将与输入字符串中指示的值进行匹配,其中-as printf() 不是。

关于android - 跨平台日志宏在 Windows 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9236329/

相关文章:

c++ - 与 Qt 第三方库的静态链接

Java 泛型与 C++ 模板

android - 使用 FFMpeg for android 解码视频

android - Firebase 消息传递 : default notification channel doesn't work

android - 清除 picasso 的缓存

PHP和C++汉字倒序UTF-8编码单元

c++ - 什么是 UpdatePerUserSystemParameters?

python - zeromq 是否支持 IPC 作为 Windows 上的传输 channel ?

windows - 用于搜索和删除特定文件名的批处理脚本

android - 如何在android中的RecyclerView项目之间添加动态 View ?