为什么我们使用"#include "stdafx.h""而不是"#include < stdafx.h>"?

Why do we use `#include "stdafx.h"` instead of `#include <stdafx.h>`?

本文关键字:stdafx #include lt 我们 gt 为什么      更新时间:2023-10-16

从这里开始,据说:

对于#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.hstdafx.cpp对。它与其他文件最终所在的目录相同。你可能最终会专门为你的项目修改它。因此,我们使用""而不是<>,原因正是它与您的第一句话所描述的目录在同一目录中。

因为每个项目的stdafx.h不同。正如您所引用的,#include ""搜索当前项目的路径,这就是stdafx.h所在的位置。

使用#include <stdafx.h>将是一个巨大的错误,因为它必须位于库路径中(所有标准库头都位于该路径中)。这意味着你不应该修改它,或者它总是保持不变,但对于不同的项目来说,它从来都不一样。

因此,即使它是由Visual Studio生成的,它也是特定于项目的,而不是所有项目的。

通常,对于给定的include文件名.h,语法#include <name>保留给标准库,而#include "name.h"用于用户定义的文件。在这里,"用户"可能意味着任何实现非标准功能的开发人员,比如某个特定的编译器包。

因此,预处理器按照由系统设置指定的适当路径来搜索包含文件。不仅要注意括号和引号之间的区别,还要注意*.h扩展名的不同用法。