GNU标准库命名约定

时间:2018-05-30 12:20:34

标签: gcc gnu styling libstdc++

当我看到GNU库的实现(主要是libstdc ++)时,我可以看到命名中有重复的模式。模板类型名为export default class FlatListBasics extends Component { constructor() { super(); this.state = { data: [ {key: 'Devin', done: true}, {key: 'Jackson', done: true}, {key: 'James', done: true}, {key: 'Joel', done: true}, {key: 'John', done: true}, {key: 'Jillian', done: false}, {key: 'Jimmy', done: true}, {key: 'Julie', done: true} ] } } _renderRow(rowData) { return <ListItem> <CheckBox checked={rowData.item.done} onPress={ () => { rowData.item.done = !rowData.item.done; return rowData; } }/> <Text> {rowData.item.key}</Text> </ListItem> } render() { return ( <FlatList data={this.state.data} renderItem={this._renderRow} extraData={this.state} /> ); } ,成员具有前置_Tp,一些令牌具有前置双下划线等。我试图找到有关命名约定的文档无济于事。 GNU有一个样式指南,代码中也跟着它,但更像是这个命名约定的一个子集。

您是否知道有关GNU gcc库实现的样式细节的任何文档?

提前致谢。

1 个答案:

答案 0 :(得分:4)

下划线不是编码惯例&#34;而是避免与用户定义的宏等进行名称冲突。

来自https://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html(这实际上是针对libc的,但我认为它也适用于libstdc ++):

  

除了本手册中记录的名称外,还有保留名称   包括所有外部标识符(全局函数和变量)   以下划线('_')和所有标识符开头,不管用途如何   以两个下划线或下划线后跟一个开头   大写字母是保留名称。这是图书馆和   头文件可以为内部定义函数,变量和宏   目的,没有与用户程序中的名称冲突的风险。

GNU网站还提供了有关其他保留名称的更多信息。 另请参阅this问题的答案。看起来C ++标准本身就决定了命名约定。

<强>更新

OP要求的信息似乎有点分散在不同的页面上。我将尝试总结下面最重要的几点:

首先,可以找到有关_T_M_等名称的信息here

摘录:

  

对于出现在标准标题中的非标准名称,我们是   约束使用以下划线开头的名称。这就是所谓的   &#34;丑化&#34 ;.惯例是:[...]

     

输入名称和模板形式参数名称:_ [A-Z] [^ _]。*

     

示例:_Helper _CharT _N

     

成员数据和函数名称:_M _。*

     

示例:_M_num_elements _M_initialize()

     

静态数据成员,常量和枚举:_S _。*

     

示例:_S_max_elements _S_default_value

进一步挖掘引导我到libstdc++ contributing page,在那里说:

  

GNU C ++库是GCC的一部分,遵循相同的开发   模型,因此适用一般规则for contributing to GCC

按照上面的链接,您将进入GNU GCC贡献页面,其中显示(在编码标准下)

  

所有贡献必须符合GNU编码标准。有   GCC还有一些额外的编码约定;这些包括   文档和测试套件要求以及要求   代码格式化。

     

将退回不符合标准的提交内容   要求解决任何此类问题。帮忙   准备可以使用脚本的补丁   contrib/check_GNU_style.sh

这最终将导致GCC Coding Conventions,这是一般指导原则。

我希望这能提供更好的信息。