2

我遇到的一些预处理器宏的参数名称包含前导下划线;例如,在 Linux 内核中:

#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)

这些参数的行为似乎与常规宏参数一样,所以我不明白为什么作者决定为每个参数名称加上前导下划线。与 的连接是否有某种意义_name,或者下划线只是作者选择使用的约定?

4

1 回答 1

2

不,没有特殊意义:这些是常规标识符。我猜测为什么作者决定添加这样的下划线是为了使这些属性的组合更清晰:

dev_attr_##_name

比阅读更容易

dev_attr##name

然而__ATTR, 看起来很可疑:在 C 中,以下划线开头后跟大写字母或另一个下划线的标识符是为实现保留的。在这种情况下,它是两个下划线,所以我希望__ATTR它是一个系统宏。

于 2013-04-29T20:10:26.207 回答