繁体   English   中英

对函数式宏的参数名称中的前导下划线有意义吗?

[英]Is there a significance to a leading underscore in the argument name of a function-like macro?

我遇到的一些预处理器宏的参数名称包含一个前导下划线; 例如,在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中,以下划线开头,后跟大写字母或另一个下划线的标识符保留给实现 在这种情况下,它是两个下划线,所以我希望__ATTR是一个系统宏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM