有一个包装函数xxxTRACE(uint loglevel, const char* message, ...),需要检查 loglevel 值并使用dev_err、dev_warn 和 ... 宏。由于例如:dev_err签名是dev_err(struct device *dev, char *fmt, args...),我能够传递消息字符串而没有任何错误,但无法传递参数,尝试传递为dev_err(dev, message, ...) , dev_err(dev, message, __VA_ARGS__),得到错误"expected expression before '...'"。请让我知道如何传递论点。谢谢 :-)
问问题
773 次
2 回答
0
这与 printf 的签名相同。您以相同的格式传递消息:例如:
dev_err("Hello World\n");
dev_warn("I'm getting old, I'm now: %d years old", my_age);
`
于 2013-06-21T02:22:02.423 回答
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)
于 2013-06-21T09:24:04.933 回答