我在无数的C / C ++标题和源文件中看到了这一点 除个人偏好外,这些不同符号的含义是什么?
_NAME
__NAME
_NAME_
__NAME__
NAME_t
老实说,我理解的唯一一个是_NAME
,它是一个类的私有成员(至少在C#中是这样)。
有人可以解释他们之间的区别吗? 如果还有其他明显的注释,请提及它们(即使是其他类似的语言)。
谢谢!
答案 0 :(得分:5)
以_
或__
开头的名称通常用于保留标识符,您不应定义/创建以该约定开头的标识符。 (_以大写字母跟随)
从C99标准,7.1.3 - “保留标识符”
- 所有以下划线和大写字母或其他字母开头的标识符 下划线总是保留用于任何用途。
- 所有以下划线开头的标识符始终保留用作标识符 在普通和标签名称空间中使用文件范围。
从C ++ 03标准(对C ++ 98的修订),第17.4.3.1.2节 - “全局名称”
- 每个包含双下划线(_ _)的名称或以下划线开头,后跟上限 案例信函(2.11)保留给任何使用的实施。
- 以下划线开头的每个名称都保留给实现,以用作名称中的名称 全局命名空间
答案 1 :(得分:3)
除了NAME_t
之外,所有这些名称都保留用于“实现”,即标准C ++库代码。 您被禁止在自己的代码中使用此类名称。
第17.6.3.3.2节“全球名称”§1陈述:
某些名称和功能签名集始终保留给实现:
包含双下划线或以下划线后跟大写字母开头的每个名称都保留给实现以供任何使用。
以下划线开头的每个名称都保留给实现,以用作全局命名空间中的名称。
(请注意,这些规则禁止我经常看到__MY_FILE_H
这样的标题保护。)
答案 2 :(得分:2)
以_t
结尾的类型是POSIX的reserved。