没有丑化名称的标准库输入源

Standard library implmentation source that hasn't had names uglified

本文关键字:标准 输入      更新时间:2023-10-16

阅读C++源代码显然是一种很好的学习方式,当它是一个你知之甚少的功能时,它非常有趣。就标准库源而言,由于名称的丑陋化,这很困难。

在源代码包含在标准库中之前,是否通过对源代码进行某种后处理来完成丑化?如果是这样,原始源代码会怎样?是否有任何非丑化C++标准库源代码的存储库?

我特别关注 C++11 和很快的 C++14 功能很有趣。

我无法想象以这种形式维护代码会很有趣......

编辑:

这里有一个建议取消这个过程。

在学习标准库实现时,首先请注意标准库必须遵守某些不适用于普通用户编写的代码的苛刻约束。此外,标准C++库完成的一些操作有些深奥,我会担心它们是否曾经被普通用户的代码使用过(如果你的公司有一个低级别的库团队,他们可能会做一些类似的事情,不过(。特别是关于约束标准库需要遵守的是,使用的任何名称都不会与用户在任何地方使用的任何名称冲突。由于用户可以定义有趣的宏,标准库需要在用户可见的上下文中使用为标准库保留的名称,例如头文件:

  • 保留标准C++库中用于类、函数、枚举等的名称或其 TMEPLATE(如果适用(。
  • 所有以下划线
  • 后跟大写字母开头的名称或包含两个连续下划线的名称都将保留在所有上下文中。
  • 但是,还有其他几个保留名称通常不在
  • 标头中使用,因为它们大多不在宏名称的上下文中保留。

您特别不想从标准C++库中复制的内容是包含保护的命名:它们通常以一个或两个下划线开头,并且都是大写字符。除非明确允许用户使用这些标识符(例如,您可以使用__FILE____LINE__,否则不允许用户使用这些标识符中的任何内容,例如,在程序中可以通过宏扩展的任何位置写入_FOOBAR(也就是说,我认为您可以编写"_FOOBAR"(。

回答你的实际问题:我所知道的所有标准C++库实现(libstdc++,libc ++,Dinkumware,RougeWave和我自己的(都是使用"丑化"的名称编写的,并且没有程序将它们转换为这种形式。基本上,任何程序都必须处理许多不太可行的异常。我认为,标准的C++库实现者只是习惯了有趣的名称。对于我的实现,我努力用一个通用的前缀命名所有内容,以便可以使用简单的sed脚本撤消丑化,但我并没有在任何地方都遵循这种模式。