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应该都是大写的,以便使它们从其他代码中突出出来。