in C++ , what's so special about “_MOVE_H”?

谁说胖子不能爱 提交于 2019-11-26 06:48:47

问题


I have a C++ file like this

#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

And to my amazement, all the code between #ifndef and #endif is simply ignored by the compiler (I swear that I am not defining _MOVE_H anywhere else), and I have all kinds of errors about missing definitions. I was thinking that I did something wrong, but when I try to use another key (like _MOVE_Ha, everything is back to normal. Does _MOVE_H mean something special in C++ ?

I\'m running Ubuntu 10.04, GCC 4.4.3, if that matters.

Thanks,


回答1:


just run grep _MOVE_H in /usr/include/c++ on your machine

for me :

c++/4.5.0/bits/move.h:#ifndef _MOVE_H

As a rule of thumb, don't use things (really anything) prefixed by _ or __. It's reserved for internal usage. Use SOMETHING_MOVE_H (usually name of the company, ...).

I guess it's a new header used to add the move semantic to c++0x.




回答2:


Anything beginning with an underscore then capital letter is reserved to the implementation. (i.e. _M). I think in general you want to stay away from leading underscores.




回答3:


I believe gcc has an include file called move.h that includes the sentinel _MOVE_H. Presumably you have collided with this. Use a different identifier, preferably one that doesn't start with an underscore. I put a GUID in mine, but then I'm really obsessive :-)




回答4:


It's a trick to prevent the same header file being included more than once. The actual value you #define doesn't matter - so long as it's only defined in that header file, the convention is NAME_HEADER_FILE_H in capitals

See also this discussion on #pragma once



来源:https://stackoverflow.com/questions/3345159/in-c-whats-so-special-about-move-h

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!