C ++中的#define里面的结构

时间:2011-11-21 01:36:21

标签: c++ c-preprocessor precompiled-headers

作为C ++的新手,我不太了解我遇到的一些指令,例如:

#ifndef BOT_H_
#define BOT_H_

#include "State.h"

/*
    This struct represents your bot in the game of Ants
*/
struct Bot
{
    State state;

    Bot();

    void playGame();    //plays a single game of Ants

    void makeMoves();   //makes moves for a single turn
    void endTurn();     //indicates to the engine that it has made its moves
};

#endif //BOT_H_

我不明白的是“#ifndef BOT_H_”和“#define - #endif”

从我收集的内容中,它定义了一个常量BOT_H_,如果它在预编译器查看它时尚未定义。我实际上并不知道它里面的struct是一个常量,以及它如何让我访问它里面的函数。

我也不明白为什么我们这样做?我曾经使用过C ++而我没有使用.h文件,所以它可能很容易让我失踪。

4 个答案:

答案 0 :(得分:10)

这称为include guard,用于防止头文件的内容被多次#included。

也就是说,它可以防止头文件的内容被复制到#included它之前已经#included它的文件中。

#define没有为struct定义常量,但它只是定义一个没有值的常量。如果先前定义了该常量,则不会重新声明该结构。

答案 1 :(得分:5)

它被称为“包括警卫”。当多次包含标头时,它可以保护您免受重新定义的影响。还有非标准的#pragma once可以做同样的事情,但可能无法在任何地方得到支持。

答案 2 :(得分:3)

它没有定义一个值为struct的常量。它定义了一个空值的常量。

它就是那里标题的内容不包括两次。基本上它说的是:

if (!bot_h_included)
{
    bot_h_included = true;

    // code from the header
}

答案 3 :(得分:1)

这称为标头保护,它会停止编译器编译或包含多次代码pragma once