NOTE: This is a c question, though I added c++ in case some C++ expert can provide a rationale or historical reason why C++ is using a different wording than C.
在C标准库规范中,我们有以下规范性文本,C17 7.1.3保留标识符(emphasis mine):
- 以下划线和大写字母或另一个下划线are always reserved for any use开头的所有标识符.
- 所有以下划线开头的标识符在普通和标记名空间中始终保留为文件范围的标识符.
现在我一直在阅读各种尊敬的C专家的答案,他们声称编译器或标准库可以使用带下划线+大写或双下划线的标识符.
"保留任何用途"不是意味着保留anyone个,除了C语言本身的future 扩展吗?这意味着允许实现使用它们.
而上面的第二个短语,关于单个前导下划线,似乎是针对实现的?
一般来说,C标准的编写方式要求编译器供应商/库实现者是典型的读者,而不是应用程序程序员.
值得注意的是,C++有一个非常不同的措辞:
- 每个名称都包含一个双下划线(
__
)或以下划线开头,后跟一个大写字母(2.11)is reserved to the implementation for any use.
(见What are the rules about using an underscore in a C++ identifier?)
这可能是C和C++的混淆,这里的语言不同吗?