我遇到的一些预处理器宏的参数名称包含前导下划线;例如,在 Linux 内核中:
#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
这些参数看起来就像常规的宏参数一样,所以我不明白为什么作者决定在每个参数名称前加上一个下划线。与 _name
的连接是否有意义,或者下划线只是作者选择使用的约定?
最佳答案
不,没有特殊意义:这些是常规标识符。我猜测作者为什么决定添加这样的下划线是为了使这些属性的组成更清晰:
dev_attr_##_name
比
更容易阅读dev_attr##name
然而,__ATTR
看起来很可疑:在 C 中,标识符以下划线开头,后跟大写字母或另一个下划线,are reserved for the implementation。 .在本例中,它是两个下划线,所以我希望 __ATTR
是一个系统宏。
关于c - 类函数宏的参数名称中的前导下划线是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16287303/