_NAME,__NAME,_NAME_,__NAME__等符号的含义

Bee*_*Guy 1 c c# c++

我在无数的C/C++头文件和源文件中看到了这一点.
除个人偏​​好外,这些不同符号的含义是什么?

  • _NAME
  • __NAME
  • _NAME_
  • __NAME__
  • NAME_t

老实说,我唯一能理解的是_NAME,这是一个班级的私人成员(至少在C#中是这样).

有人可以解释他们之间的区别吗?
如果有任何其他明显的符号,请提及它们(即使是其他类似的语言).

谢谢!

wkl*_*wkl 5

以保留标识符开头___通常用于保留标识符的名称,您不应定义/创建以该约定开头的标识符.(_以大写字母跟随)

从C99标准,7.1.3 - "保留标识符"

- 所有以下划线开头的标识符以及大写字母或另一个下划线始终保留用于任何用途.

- 所有以下划线开头的标识符始终保留用作普通和标记名称空间中具有文件范围的标识符.

从C++ 03标准(对C++ 98的修订),第17.4.3.1.2节 - "全局名称"

- 每个包含双下划线(_ _)的名称或以下划线开头,后跟大写字母(2.11)的名称保留给实现以供任何使用.

- 以下划线开头的每个名称都保留给实现,以用作全局名称空间中的名称


fre*_*low 5

除了 之外NAME_t,所有这些名称都是为“实现”保留的,即标准 C++ 库代码。禁止您在自己的代码中使用此类名称

\n\n

第 17.6.3.3.2 节“全局名称”\xc2\xa71 指出:

\n\n
\n

某些名称和函数签名集始终保留给实现:

\n\n
    \n
  • 每个包含双下划线或以下划线开头后跟大写字母的名称都保留给实现以供任何使用。

  • \n
  • 每个以下划线开头的名称都保留给实现,用作全局命名空间中的名称。

  • \n
\n
\n\n

(请注意,这些规则禁止像__MY_FILE_H我经常看到的那样的标头保护。)

\n