我经常遇到一些预处理宏的参数名称以下划线开头; 例如,在Linux内核中:
#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
这些参数似乎表现得就像普通的宏参数一样,所以我想不出为什么作者决定在每个参数名称前加一个下划线。与_name
连接是否有重要意义,还是下划线只是作者选择使用的约定?
__ATTR
是可疑的。 - Sergey Kalinichenkogcc
特有的。你会发现有很多链接器部分的黑科技和其他非标准C的东西(例如init_call
等)。我喜欢爱德华·D·威林克(Edward D. Willink)的Fog论文。其中一部分描述了系统设计模式;即,在源代码中无处不在的事物。在Linux中有很多违反规则的基础设施,就像代码生成工具;Qt的moc
、c-front、kbuild等。这在GNU工具、管道和其他Unix shell哲学下尤其容易实现。 - artless noise