在C++中,"_ MOVE_H"有什么特别之处?

phu*_*ehe 7 c++ include-guards

我有这样的C++文件

#ifndef _MOVE_H
#define _MOVE_H

class Move {
    int x, y;
public:
    Move(int initX = 0, int initY = 0) : x(initX), y(initY) {}
    int getX() { return x; }
    void setX(int newX) { x = newX; }
    int getY() { return y; }
    void setY(int newY) { y = newY; }
};

#endif
Run Code Online (Sandbox Code Playgroud)

很让我惊讶,所有的代码#ifndef,并#endif简单地由编译器(我发誓,我没有界定忽视_MOVE_H其他地方),我有失踪定义的各种错误.我在想我做错了什么,但是当我尝试使用另一个键时(比如_MOVE_Ha,一切都恢复正常.这是否_MOVE_H意味着C++中的一些特殊内容?

我正在运行Ubuntu 10.04,GCC 4.4.3,如果这很重要的话.

谢谢,

Sch*_*ron 16

只需在你的机器上运行/ usr/include/c ++中的grep _MOVE_H即可

为了我 :

c++/4.5.0/bits/move.h:#ifndef _MOVE_H
Run Code Online (Sandbox Code Playgroud)

根据经验,不要使用或以前缀为前缀的东西(实际上是任何东西).它保留供内部使用.使用(通常是公司名称,......).___SOMETHING_MOVE_H

我想这是一个用于将移动语义添加到c ++ 0x的新标头.

  • 为了澄清下划线规则,保留了以下内容:任何以*_为前缀的*global*名称,以`__`为前缀的任何类型的任何名称,以及以`_`为前缀并以首字母开头的任何类型的任何名称信件.OP违反了第一和第三条规则. (12认同)
  • 任何包含`__`的名称都是保留的.它不需要加前缀. (6认同)

Jam*_*mes 6

以下划线然后以大写字母开头的任何内容都保留给实现.(即_M).我想一般来说你想远离领先的下划线.