gpt4 book ai didi

c++ - 在我的类头文件中的预编译头文件中包含头文件并在其外部包含头文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:28 24 4
gpt4 key购买 nike

我已经对此进行了一段时间的搜索,但我不断得到的答案无法回答这种特定情况。

我有一个类叫做 VisibleGameObject .我想知道如果我将我的普通包含放在 header 中(以便其他开发人员可以使用相同的类),然后将相同的包含放在我的预编译 header 中会发生什么 stdafx.h我不希望开发人员依赖我的个人计算机。

// VisibleGameObject.h

#pragma once
#include "SFML\Graphics.hpp"
#include <string>

class VisibleGameObject
{
public:
VisibleGameObject();
virtual ~VisibleGameObject();

virtual void Load( std::string filename );
virtual void Draw( sf::RenderWindow & window );

virtual void SetPosition( float x, float y );

private:
sf::Sprite _sprite;
sf::Image _image;
std::string _filename;
bool _isLoaded;
};

实现:

// VisibleGameObject.cpp
#include "stdafx.h"
#include "VisibleGameObject.h"

...

PCH:

// stdafx.h
#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>


// TODO: reference additional headers your program requires here
#include <SFML/System.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/Audio.hpp>

当我构建我的项目时(在我编译一次之后),#include <SFML/Graphics.hpp>每次都要重新编译?因为它包含在这个类的头文件中。我认为发生的情况是 pch 首先包含在 cpp 文件的翻译单元中,然后是 #include <SFML/Graphics.hpp>包含保护所以 pch 正常工作,我的包含被忽略。在 Visual Studio 中,不首先包含 pch 是错误的。我只想确认这种行为。 pch是否正常使用,没有<SFML/Graphics.hpp>代码重新编译了吗?

最佳答案

如果 header 的作者根本没有加盐,那么不,它不会被重新编译。

PCH 包括完整的定义,包括 #ifndef、#define、#endif 包括保护逻辑。在 PCH 创建期间,文件将被拉入、编译,并正式定义包含保护标识符。在任何 #include "stdax.h" 之后的源代码中,所有预编译的内容都被吸入。源代码包含用于编译的可疑 header 。但是,一旦发现 include guard 的 #ifndef id 已定义,预处理器将跳过所有内容。注意:有可能可以为专门关闭了 PCH 的翻译单元重新编译,但我怀疑您是否这样做过。

简而言之,您的做法是正确的,您的评估也是准确的。

关于c++ - 在我的类头文件中的预编译头文件中包含头文件并在其外部包含头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24177306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com