我感觉这是一个简单的问题,但我似乎无法弄清楚如何解决它。我有一个大型应用程序,我正在移植到Android。代码中充斥着许多日志调用,如下所示:
LOG_WARN(s_debugHandle, ("OpenGL error detected on entry. (Error:0x%x).",glError));
我想重新定义LOG_WARN以便与Android兼容。我所做的就是这样:
#define LOG_WARN(handle, ...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
编译时,编译器会告诉我:
error: invalid conversion from 'int' to 'const char*'
error: initializing argument 3 of 'int __android_log_print(int, const char*, const char*, ...)'
glError是一个int,但是其他变量类型的其他调用给出了相同的转换错误,而是来自该类型。我尝试过:
请帮忙!
更新:
预处理后,调用如下所示:
__android_log_print(ANDROID_LOG_WARN, "debug", ("OpenGL error detected on entry. (Error:0x%x).",glError));
答案 0 :(得分:1)
您可以使用print原语的可变版本安装自己的中间函数:
#include <cstdarg>
void forward_debug(const char * fmt, ...)
{
std::va_list ap;
va_start(ap, fmt);
__android_log_vprint(ANDROID_LOG_WARN, LOG_TAG, fmt, ap);
va_end(ap);
}
#define LOG_WARN(ignore, x) forward_debug x
更新:这是另一个想法:
#define SPLIT(...) __VA_ARGS__
#define LOG_WARN(ignore, x) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, SPLIT x)