我有以下情况:
#define DBG_ALOGD(a) ALOGD("%s:%d: ", __FUNCTION__, __LINE__); ALOGD a
#define DBG_MSG(a) do { if (debuggable) {DBG_ALOGD(a);} } while (0)
应用程序使用
DBG_MSG(a)
来打印日志。DBG_MSG("Hi %d", 2);
将打印为
LOG_TAG: function_name:121
LOG_TAG: Hi 2
我想将FUNCTION:LINE与“ Hi 2”结合在一行中。
我试过了
#define DBG_ALOGD(a) ALOGD("%s:%d:%s", __FUNCTION__, __LINE__, a)
#define DBG_MSG(a) do { if (debuggable) {DBG_ALOGD(a);} } while (0)
它没有用,因为它不是普通字符串,也有
%d
请提出如何更改
#define
使其具有这些特征的组合。 最佳答案
我认为您可以使用宏变量参数(variadics):
#include <stdio.h>
#define DBG_ALOGD(fmt, ...) ALOGD("%s:%d: " fmt, __FUNCTION__, __LINE__, __VA_ARGS__ );
#define DBG_MSG(fmt, ...) do { if (debuggable ) {DBG_ALOGD(fmt, __VA_ARGS__ );} } while (0)
int main(void)
{
int debuggable = 1;
DBG_MSG("%s(%d)\n", "test", 0);
DBG_MSG("%s", "hello");
return 0;
}
我用
printf
函数而不是ALOGD
测试了它,但是我认为结果将是相同的。警告,您将无法直接调用
DBG_MSG("simple string")
,因为编译器将等待...
中不为空的内容关于android - 嵌套的ALOGD语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48740108/