有一个包装函数 xxxTRACE(uint loglevel,const char * message,...),需要检查loglevel值并使用 dev_err,dev_warn和... macros 。因为ex: dev_err 签名是 dev_err(struct device * dev,char * fmt,args ...),我能够传递消息字符串而没有任何错误,但无法传递参数,尝试传递 dev_err(dev,message,...), dev_err(dev,message,__ VA_ARGS __),收到错误“在'...'之前的预期表达“。请告诉我如何传递参数。谢谢: - )
答案 0 :(得分:0)
这与printf的签名相同。您以相同的格式传递消息:例如:
dev_err("Hello World\n");
dev_warn("I'm getting old, I'm now: %d years old", my_age);
`
答案 1 :(得分:0)
我通常在__VA_ARGS__
可用的地方使用宏。我不太确定哪个C标准支持这个。它适用于gnu99,也许它适用于gnu89。
#define xxxTRACE(loglevel, message, ...) do { \
if (loglevel == 0) { \
dev_err(dev, message, __VA_ARGS__) \
} else { \
dev_warn(dev, message, __VA_ARGS__) \
} \
} while (0)