gpt4 book ai didi

android - 跨平台日志宏不适用于 Windows

转载 作者:可可西里 更新时间:2023-11-01 10:27:51 26 4
gpt4 key购买 nike

我正在使用宏在不同平台上进行简单的日志记录。这是我在 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 类型作为实际参数值的容器,这些值将与输入字符串中指示的值匹配,其中- 因为 printf() 不是。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com