stdafx.h到底有什么用

我发现自己养成了一个比较好的习惯,有关编程的事情,一定知其然知其所以然

因为刚刚接触使用VS的时候,所以很多这个IDE的很多东西不清楚

例如:在新建一个项目的时候,很多时候有stdafx.h,我就在想这个文件究竟是干什么的

1.预编译头

头文件夹下会默认有头文件stdafx.h,而源文件夹下则默认有源文件stdafx.cpp,手动将这些文件删除后,编译时系统还会报错

stdafx.h并不是标准C++头文件,也就是说,该文件本质上相当于自定义的一个头文件( 这里是VS默认自定义的文件),与项目的源代码文件存放在同一个文件文件夹下,通过#include"stdafx.h"引用;

  从内容上来说,头文件stdafx.h是

  1.包含标准头文件 ,就是这个头文件包含标准C的头文件,例如:stdio.h、string.h这些,这种做法实际在我们项目中很常见,把大部分.c文件需要的头文件,放在一个头文件中,这样只有include这一个头文件就行,省事

  2.包含项目中的不会轻易改动的头文件

2.预编译头设置

可以在项目->属性->c/c++->预编译头,进行设置,

1.开启、关闭预编译头

2.改变预编译头的名字,所以并一定用stdafx名字

3.修改预编译头输出文件的路径

3.预编译头的原理

每一次的预编译宏展开和不同的源文件需要包含一些相同头文件,只要某个源文件发生变化,都要重新做一次宏展开,浪费了很多时间,所以引入了预编译头,预编译头一次编译,重复使用,除非有修改

在编译过程中,stdafx.cpp和stdafx.h文件用于生成一个预编译头文件 project.pch和预编译类型文件stdafx.obj。

但是预编译头文件包含有众多头文件的处理信息,故而其本身会占用较大的存储空间,故而可以注意清理不需要的预编译头。

4.关于报错

1. 无法打开预编译头文件"xxx.pch":no such file or directory 的问题

分析:根据上面的原理解释,可能是由于编译器无法通过stdafx.cpp创建一个预编译文件,从而其他文件没有办法去引用该pch文件。

解决方案:选中源文件stdafx.cpp,右键 -> 属性 -> C/C++ -> 预编译头,出现上述问题一般是由于预编译头的选项从 创建 变为了 使用 ,通过将选项重新改为创建可解决问题。

2. 在查找预编译头文件时遇到意外的文件结尾

需要将指令#include"stdafx.h" 放在每个文件的开始位置,以供处理。

微软的官方说明文档:https://docs.microsoft.com/zh-cn/cpp/ide/precompiled-header-files

百度答案:https://zhidao.baidu.com/question/3711602.html

stackoverflow:https://stackoverflow.com/questions/4726155/what-is-stdafx-h-used-for-in-visual-studio

猜你喜欢

转载自blog.csdn.net/follow_blast/article/details/81704460
今日推荐