gpt4 book ai didi

c++ - VS2012 预编译头文件 : how does my . h 文件知道包含在 stdafx.h 中吗?

转载 作者:行者123 更新时间:2023-11-30 02:56:20 25 4
gpt4 key购买 nike

我在 VS2012 中有一个使用预编译头文件的非常基本的项目。我知道我应该将所有“常见”包含添加到 stdafx.h 并且我需要将其包含在每个 .cpp 文件中。因此,基本设置如下所示:

Foo.h:

#ifndef FOO_H
#define FOO_H

class Foo {

public:
Foo();
~Foo();

void do(string str);
};
#endif

Foo.c:

#include "stdafx.h"
#include "Foo.h"

void Foo::do(string str) {}

在 stdafx.h 中:

#include <string>
using namespace std;

如果没有预编译头文件,我会输入 #include <string>进入 foo.h,因为它必须知道 string 的声明.但是这个 foo.h 如何知道 string在这个设置中? (请注意,stdafx.h 仅包含在 .cpp 文件中)。

注意:我有一个使用预编译头文件的工作示例;问题在于它是如何工作的。

最佳答案

这是因为编译器按照它们在主编译单元中出现的顺序处理 header 。

因为 .cpp包含文件 <string> (间接通过 "stdafx.h" ), <string> 的内容编译器已知,并且可以被后面的代码使用,甚至是从头文件中提取的代码。

虽然它很脆弱,因为在没有先包含 <string> 的情况下包含你的头文件会导致错误。

关于c++ - VS2012 预编译头文件 : how does my . h 文件知道包含在 stdafx.h 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15660412/

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