为什么我们使用"#include "stdafx.h""而不是"#include < stdafx.h>"?
Why do we use `#include "stdafx.h"` instead of `#include <stdafx.h>`?
从这里开始,据说:
对于
#include "filename"
,预处理器在目录作为包含指令的文件。这种方法是通常用于包括程序员定义的头文件。对于
#include <filename>
,预处理器在实现中进行搜索依赖方式,通常在由编译器/IDE。此方法通常用于包含标准库头文件。
而这个wiki链接表明stdafx.h
是由visual studio IDE
预先设计的头文件
stdafx.h是一个由Microsoft Visual Studio IDE向导生成的文件,描述标准系统和特定于项目的包含文件它们经常使用,但几乎从未改变。
兼容的编译器(例如Visual C++6.0及更新版本)将预编译此文件以减少总体编译时间。Visual C++将在源代码中#include"stdafx.h"之前不要编译任何内容文件,除非取消选中编译选项/Yu"daffx.h"(由默认);它假设源代码中的所有代码行已编译。
stdafx.h中的AFX代表应用程序框架扩展。AFX是Microsoft基础类的原始缩写(MFC)。虽然默认情况下使用名称stdafx.h,但项目可能指定替代名称。
然后
为什么我们使用#include "stdafx.h"
而不是#include <stdafx.h>
VS根据模板生成stdafx.h
、stdafx.cpp
对。它与其他文件最终所在的目录相同。你可能最终会专门为你的项目修改它。因此,我们使用""
而不是<>
,原因正是它与您的第一句话所描述的目录在同一目录中。
因为每个项目的stdafx.h
不同。正如您所引用的,#include ""
搜索当前项目的路径,这就是stdafx.h
所在的位置。
使用#include <stdafx.h>
将是一个巨大的错误,因为它必须位于库路径中(所有标准库头都位于该路径中)。这意味着你不应该修改它,或者它总是保持不变,但对于不同的项目来说,它从来都不一样。
因此,即使它是由Visual Studio生成的,它也是特定于项目的,而不是所有项目的。
通常,对于给定的include文件名.h,语法#include <name>
保留给标准库,而#include "name.h"
用于用户定义的文件。在这里,"用户"可能意味着任何实现非标准功能的开发人员,比如某个特定的编译器包。
因此,预处理器按照由系统设置指定的适当路径来搜索包含文件。不仅要注意括号和引号之间的区别,还要注意*.h扩展名的不同用法。
- 既然存在危险,为什么项目要使用-I include开关
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何将更多文件夹添加到c++include路径
- 什么是"#include <boost/functional/hash.hpp> "?
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- C++包含来自 #include "DevEngine/Core.h" 的错误
- <filesystem> 在 clang 6 和 10 上 #include 错误
- 在 void 函数中使用 #include 变量C++
- N-API include an .so or dll
- 允许哪些令牌作为 #include 的参数?
- VS2015/VC++ 在新类模板中禁用默认 #include "stdafx.h"
- 我可以在Visual Studio C++中使用 #include "pch.h" 而不是 #include "stdafx.h" 作为我的预编译头吗?
- 在 C++ 中,在 stdafx.h 之前 #include iostream
- 为什么我们使用"#include "stdafx.h""而不是"#include < stdafx.h>"?
- 为什么我必须在Microsoft Visual Studio C++应用程序中 #include "stdafx.h"?
- 在向孩子教授C++时使用"include stdafx.h"?
- 在 cpp 文件中使用 #include "Stdafx.h"
- 为什么我不能运行这个为什么这个c ++代码在Visual Studio中给出错误,尽管它在删除后在代码块中运行良好 #include "stdafx.h"
- 尝试构建现有项目,很多"Cannot open include file: 'StdAfx.h': No such file or directory"
- 编译需要 #include "stdafx.h"