作为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文件,所以它可能很容易让我失踪。
答案 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