C++ 在C+中使用Pragma和条件编译+;

C++ 在C+中使用Pragma和条件编译+;,c++,C++,我试图理解一些使用include-guards编译pragma和header的例子 我不是问他们之间的区别。我要特别问的是,根据我所提供的例子,我在课堂上的说明是否正确 当我运行我的程序时,我不知道它是否工作 在他们展示的例子中 #pragma once #if !defined(x_header_included) #define x_header_included class X { … }; #endif

我试图理解一些使用
include-guards编译
pragma和header的例子

我不是问他们之间的区别。我要特别问的是,根据我所提供的例子,我在课堂上的说明是否正确

当我运行我的程序时,我不知道它是否工作

在他们展示的例子中

#pragma once 
#if !defined(x_header_included) 
#define x_header_included 
class X { … }; 
#endif 
<我的C++无知中,我已经翻译成这个,

#include <iostream>

#pragma once
#if !defined(my_headers)
#define my_headers

#include "npc.h"
#include "pc.h"
#include "health.h"

class game {
private:
    npc n;
    pc p;
    health h;

public:
    game(const npc& init_n, const pc& init_p, const health& init_h):
    n(init_n),
    p(init_p),
    h(init_h)
    {}


    game(std::string gen, std::string abil, bool use, int lvl, int h, int arm) :
    n(gen, abil),
    p(use, lvl),
    h(h, arm)
    {
    }

    friend std::ostream& operator<<(std::ostream& s, const game& g) {
        g.n.output(s);
        g.p.output(s);
        g.h.output(s);
        return s;
    }

    npc get_n() { return n; }
    pc get_p() { return p; }
    health get_h() { return h; }

    void set_n(npc init_n) { n = init_n; }
    void set_p(pc init_p) { p = init_p ; }
    void set_h(health init_h) { h = init_h; }
};

#endif
#包括
#布拉格语一次
#如果!已定义(my_标题)
#定义我的标题
#包括“npc.h”
#包括“pc.h”
#包括“health.h”
班级游戏{
私人:
npc n;
pc-p;
卫生保健;
公众:
游戏(常数npc和初始n、常数pc和初始p、常数健康和初始h):
n(初始n),
p(初始p),
h(初始值)
{}
游戏(标准::字符串生成,标准::字符串能力,布尔使用,整数层,整数h,整数臂):
n(gen,abil),
p(使用,lvl),
h(h,臂)
{
}

friend std::ostream&Operator这些被称为包含守卫;如果
#pragma曾经
取代了全面的
游戏
类定义而不是
类X{…},请在此阅读更多关于他们的信息
那么它似乎不是很通用。也许这只限于一家编译器供应商?)@wonkoraltime:
#pragma once
不是MS专用的,但它肯定不是可移植的。@wonkoraltime:
#pragma once
也受gcc和clang支持。其他编译器也支持该pragma,但这是真的:Any
#pragm根据定义,a
是特定于编译器的。唯一的共同点是编译器应该忽略他们不知道的pragma指令。也就是说,像任何宏一样的include-guard应该都是大写的,以便使它们从其他代码中突出出来。