来自这里,据说:
对于
#include "filename",预处理程序在与包含指令的文件相同的目录中进行搜索。此方法通常用于包含程序员定义的头文件。 对于#include <filename>,预处理程序以依赖于实现的方式进行搜索,通常在编译器/IDE预先指定的搜索目录中进行搜索。此方法通常用于包括标准库头文件。
而这个wiki链接建议stdafx.h是visual studio IDE预先设计的头文件。
H是一个由向导生成的文件,它描述了标准系统和特定于项目的文件,包括经常使用但很少更改的文件。 兼容编译器(例如VisualVISUAL6.0及更新版本)将预编译此文件,以减少整个编译时间。在源文件中包含"stdafx.h“之前,Visual C++将不会编译任何内容,除非未选中编译选项/Yu'stdafx.h‘(默认情况下);它假定源代码中的所有代码都已经编译完毕,并包含了该行。 在stdafx.h中的AFX代表Application。AFX是Microsoft类(MFC)的原始缩写。在默认情况下使用stdafx.h名称时,项目可以指定另一个名称。
然后
为什么我们使用#include "stdafx.h" #include <stdafx.h> 而不是#include <stdafx.h> ?
发布于 2016-05-16 15:39:46
一个stdafx.h,stdafx.cpp对是由VS从模板生成的。它驻留在相同的目录中,其余的文件最终都会保存在同一目录中。您可能最终会为您的项目专门修改它。因此,我们使用""而不是<>,完全是因为它位于您的第一个引号所描述的同一个目录中。
发布于 2016-05-16 15:41:14
因为每个项目的stdafx.h是不同的。正如您所引用的,#include ""搜索当前项目的路径,这就是stdafx.h所在的位置。
使用#include <stdafx.h>将是的一个巨大的错误,因为它必须在库路径中(所有标准的库头都位于那里)。这意味着您不应该修改它,或者它始终保持不变,但是对于不同的项目,它永远不会相同。
因此,即使它是由Visual生成的,但它是特定于项目的,而不是所有的项目。
发布于 2018-03-28 14:43:44
通常,对于给定的包含文件名称.h,语法#include <name>保留给标准图书馆,而#include "name.h"用于用户定义的文件。在那里,“用户”可能意味着任何实现非标准特性的开发人员,比如某个特定的编译器包。
因此,预处理器按照系统设置所指定的适当路径搜索包含文件。不仅要注意括号和引号之间的差异,还要注意*.h扩展的不同用法。
https://stackoverflow.com/questions/37257725
复制相似问题