注意:这是一个c问题,尽管我添加了c++以防某些 C++ 专家可以提供 C++ 使用与 C 不同的措辞的基本原理或历史原因。
在 C 标准库规范中,我们有这个规范文本,C17 7.1.3 Reserved identifiers(强调我的):
- 所有以下划线和大写字母或另一个下划线开头的标识符始终保留用于任何用途。
- 所有以下划线开头的标识符始终保留用作普通和标记名称空间中具有文件范围的标识符。
现在,我一直在阅读各种受人尊敬的 C 专家关于 SO 的答案,他们声称编译器或标准库可以使用带有下划线 + 大写或双下划线的标识符。
“保留用于任何用途”是否意味着保留给除了 C 语言本身的未来扩展之外的任何人?这意味着不允许实现使用它们。
虽然上面的第二个短语,关于单个前导下划线似乎是针对实现的?
通常,C 标准的编写方式期望编译器供应商/库实现者是典型的读者——而不是应用程序程序员。
值得注意的是,C++ 有一个非常不同的措辞:
- 每个包含双下划线 (
__
) 或以下划线后跟大写字母 (2.11)的名称都保留给实现以供任何使用。
这可能是 C 和 C++ 之间的混淆,并且这里的语言不同吗?