【发布时间】:2020-10-15 16:24:33
【问题描述】:
为了更好地理解 libc 的工作原理,我阅读了 FreeBSD 源代码。在那里我偶然发现了 sys/_types.h 文件中 __uint8_t 的定义。我可以理解类型的定义,如 u_int8_t 以与旧代码兼容,但是一个特殊的 _types.h 文件,其中所有类型都以 __?为什么这些类型在 types.h 附带的 _types.h 文件中定义,而不仅仅是 types.h 与标准 uint8_t 等其他类型完全一致?
(我假设这些以__开头的类型没有定义为与旧代码兼容,因为它没有写在注释中)
【问题讨论】:
-
@user4581301 我没有关注该链接,但值得注意的是,C 和 C++ 之间的双下划线规则不同。 C 只保留以双下划线(或下划线后跟大写字母)开头的标识符,而 C++ 保留所有使用双下划线的标识符,无论它出现在哪里。
-
再想一想,既然问题是关于libc的,我要拉链接和C++标签。
-
只是一个想法:libc 是特定环境实现的一部分。编写标准库(独立环境)的规则与编写托管程序的规则不同。再次只是一个想法。
-
我不确定;但是 FreBSD 的源代码有很长的历史(可以追溯到 1970 年代的原始 BSD)并且
stdint.h更新很多(可能是 2001 年?);所以可能 FreeBSD 在有标准之前就使用了它们的“非标准”类型,而在引入stdint.h之后继续使用它们(以避免改变一切)。 -
@Brendan C99 标准中引入了固定宽度(以及快速/最小变体)。