为什么有些函数/变量在它们前面有字符“_”,在C ++中?


Why do some functions/variables have the character “_” in front of them , in C++ ?

本问题已经有最佳答案,请猛点这里访问。

最近,我在类数据成员、方法或其他东西前面有"uu"的游戏或其他应用程序中看到了很多。例如,从dxut.cpp(directx)_Acquires_lock_(g_cs)_Releases_lock_(g_cs)_tmain中选取。在类似的游戏编程中有很多这样的例子(摘自gamefromscratch教程)

1
2
  static GameState _gameState;
  static sf::RenderWindow _mainWindow;

这些只是某些类型的数据成员。

有什么理由隐藏在这个字符后面吗?如果是专门为某件事?


通常,当看到带有前导下划线的名称时,

  • 属于(C++)实现,或

  • 被不知道第一种可能性的人选中。

不建议在用户代码中使用带前导下划线的名称。

任何以下划线开头的名称都保留给全局命名空间中的实现,任何以前导下划线后跟大写开头的名称都保留给任何实现。

我还记得,任何带有两个连续下划线的名称都是保留名称。

新手程序员可以使用前导下划线来表示"数据成员"。

对于了解上述内容的人来说,通常的惯例是一个尾随下划线和/或一个前缀,如mmy

例如,我记得在Boost中使用了尾随下划线,而在MFC中使用了mmy前缀(我仍然记得)。


_Acquires_lock_(g_cs) or _Releases_lock_(g_cs)

该命名约定使用保留名称,这意味着只允许编译器实现使用它们。

这样可以确保实现可以使用永远不会与宏或用户定义的其他名称冲突的名称,因为不允许用户使用这些保留名称。

带有单个下划线和小写字母的名称只是表示成员变量的惯用方法,或者是不属于API的私有实现细节。


通常在变量名称之前加上下划线(EDCOX1,4),这意味着它是平台上C++实现的一部分。避免在自己的代码中以下划线开头变量。

阅读下面的答案:"在C++标识符中使用下划线的规则是什么?"有关C++命名约定的更多信息(特别是下划线)。