GNU 标准库命名约定

cor*_*sel 5 gcc gnu styling libstdc++

当我查看 GNU 库的实现(好吧,主要是 libstdc++)时,我可以看到命名中有重复出现的模式。模板类型被命名_Tp,成员有前缀_M_,一些标记有双下划线等。我试图找到有关命名约定的文档,但无济于事。GNU 有一个样式指南,它也在代码中遵循,但更像是这个命名约定的一个子集。

你知道关于 GNU gcc 库实现的样式细节的任何文档吗?

提前致谢。

and*_*eee 5

下划线不是“编码约定”,而是为了避免与用户定义的宏等发生名称冲突。

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

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

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

更新:

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

首先,可以在此处找到有关名称(如_T或 )的信息。_M_

摘抄:

对于出现在标准标题中的非标准名称,我们被限制使用以下划线开头的名称。这被称为“丑化”。公约是: [...]

类型名称和模板形式参数名称:_[AZ][^_].*

示例:_Helper _CharT _N

成员数据和函数名称:_M_.*

例子:_M_num_elements _M_initialize()

静态数据成员、常量和枚举:_S_.*

示例:_S_max_elements _S_default_value

进一步挖掘将我带到libstdc++ 贡献页面,它说:

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

按照上面的链接,您将到达 GNU GCC 贡献页面,在那里阅读(在编码标准下)

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

不符合标准的提交将被退回,并要求解决任何此类问题。为了帮助准备补丁,您可以使用脚本 contrib/check_GNU_style.sh

这最终将导致GCC 编码约定,这是一个通用指南。

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