0

有一个包装函数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 '...'"。请让我知道如何传递论点。谢谢 :-)

4

2 回答 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 回答