gcc GNU标准库命名约定

vuktfyat  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(187)

当我看到GNU库的实现时(好吧,主要是libstdc++),我可以看到在命名中有重复的模式。模板类型命名为_Tp,成员有前置的_M_,一些标记有前置的双下划线,等等。我试图找到关于命名约定的文档,但没有任何结果。GNU有一个样式指南,在代码中也遵循了它,但更像是该命名约定的子集。
你知道任何关于GNU gcc库实现的样式细节的文档吗?
先谢谢你。

ui7jx7zq

ui7jx7zq1#

下划线不是一个“编码约定”,而是为了避免与用户定义的宏等发生名称冲突。
https://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html(这实际上是针对libc的,但我假设它也适用于libstdc++):
除了本手册中记录的名称外,保留名称还包括所有外部标识符(全局函数和变量),以下划线开始('_')和所有以两个下划线开始或下划线后跟一个大写字母的标识符(无论如何使用)都是保留名称。这是为了使库和头文件可以定义函数、变量和宏,而不会有与用户程序中的名称冲突的风险。
GNU网站也提供了更多关于保留名称的信息。也可以参考this问题的答案。看起来C++标准本身就规定了命名约定。

更新日期:

观察员所要求的资料似乎有点分散在不同的页面上。我将试图总结以下最重要的几点:
首先,关于_T_M_等名称的信息可以在here中找到。
摘录:
对于出现在标准标头中的非标准名称,我们被限制使用以下划线开始的名称。这称为“丑化”。约定为:[...]
类型名称和模板形式参数名称:_[A-Z][^_].*
范例:_Helper _ChartT_N
成员数据和函数名称:M.*
范例:_M_num_元素_M_初始化()
静态数据成员、常数和枚举型别:S.*
范例:_S_最大_元素_S_预设_值
进一步的挖掘让我找到了libstdc++ contributing page,上面写着:
GNU C++库是GCC的一部分,遵循相同的开发模型,因此一般规则for contributing to GCC适用。
按照上面的链接,您将到达GNU GCC贡献页面,在那里它读到(在编码标准下)
所有的贡献必须符合GNU编码标准。还有一些附加的GCC编码约定;这些包括文档和测试套件需求以及对代码格式化的需求。
不符合标准的提交将被退回,并要求解决任何此类问题。为了帮助准备补丁,您可以使用脚本contrib/check_GNU_style.sh
这将最终导致GCC Coding Conventions,这是一个通用的指导方针。
我希望这能提供一些更好的信息。

相关问题