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

时间:2016-02-11 13:42:31

标签: c++

I've seen quite a lot lately, in games or other applications that class data members, or methods or other stuff have "_" in front of the name. For example taken fro DXUT.cpp (Directx) _Acquires_lock_(g_cs) or _Releases_lock_(g_cs) or _tmain . There are numerous examples like this in game programming like there (Taken from GameFromScratch Tutorial)

  static GameState _gameState;
  static sf::RenderWindow _mainWindow;

These are just some data members of some type.

Is there any reason behind the _ char? Is if specifically for something?

3 个答案:

答案 0 :(得分:12)

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

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

  • 是由不知道第一种可能性的人选择的。

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

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

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

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

对于那些了解上述内容的人来说,通常的约定是尾随下划线,和/或mmy等前缀。

E.g。我记得,在Boost中使用了尾随下划线,而在MFC中使用了mmy前缀(我记得)。

答案 1 :(得分:2)

  

_Acquires_lock_(g_cs)_Releases_lock_(g_cs)

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

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

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

答案 2 :(得分:-8)

通常,变量名前面的下划线(_)表示它是您平台上C ++实现的一部分。避免在自己的代码中使用下划线开始变量。

阅读"What are the rules about using an underscore in a C++ identifier?"的答案,了解有关C ++命名约定的更多信息(尤其是下划线约定)。