StdAfx.cpp 这个文件有什么用呢?
我用 AppWizard 建立一个简单的名为 Hello 的 Project ,里面有 Hello.cpp ,StdAfx.h 和 StdAfx.cpp 这几个文件。
我发现 Hello.cpp 这个源文件中用了 #include "stdafx.h" 这个预处理命令包含了 StdAfx.h 这个文件;而 StdAfx.cpp 这个源文件也用了同样的预处理命令包含了 StdAfx.h 这个文件。因为编译器不会编译 *.h 头文件,因此建立一个名为 StdAfx.cpp 的 *.cpp 文件,这个文件的存在是为了编译一个预编译头文件,因为编译这类 *.h 头文件需要花费大量的时间,因此把 StdAfx.cpp 文件编译成一个预编译头文件,以后每一次编译的时候,就直接从硬盘里读取进行读取,以节省大量的时间。P.S. 所谓的预编译头文件和目标模块是一回事吧?
但是我现在 Hello.cpp 这个文件也用了 #include "stdafx.h" 这个预处理命令包含了 StdAfx.h 这个文件,因此我想编译器在进行预处理的时候会把 StdAfx.h 这个文件嵌入到 Hello.cpp 文件的特定的位置。因此在编译 Hello.cpp 的时候也会把 StdAfx.h 这个文件的源程序部会编译一遍,这会花费大量的时间。按照编译器在 Make 的时候所遵照的规则,即会比较文件的更新时间,对最近修改过的源文件进行编译,所以如果修改了 Hello.cpp ,那么编译器应该会把 Hello.cpp 这个源程序重新编译一次,同时也把嵌入其中的 StdAfx.cpp 文件部分编译一次。这样的话,还是花费了大量的时间,我没有看到 StdAfx.cpp 这个文件所编译成的预编译头文件在什么地方用到了,看不出来这个过程中怎么节省时间了。还有,既然已经把 StdAfx.cpp 文件编译成预编译头文件了,为什么还要在 hello.cpp 文件中用#include "stdafx.h" 这个预处理命令包含了 StdAfx.h 这个文件呢?既然已经包含了 StdAfx.h 这个文件了,那么为什么还要需要 StdAfx.cpp 文件,把它编译成
预编译头文件呢?这个预编译头文件和哪些文件连接呢?这个简单的工程中只有 Hello.cpp ,StdAfx.cpp 和 StdAfx.h 这几个文件,而 Hello.cpp 这个源文件已经包含了 StdAfx.h 文件,因此我觉得没有必要把用 StdAfx.cpp 文件编译成的预编译头文件和用 Hello.cpp 文件编译成的目标文件进行连接吧?
---------
学习 VC++ 中,总是被这一个问题所困惑,甚至在“深入浅出 MFC ”中也没有找到答案,唯恐自己表述不不清楚,因此打了很多字。请大家指教。谢谢。
我发现 Hello.cpp 这个源文件中用了 #include "stdafx.h" 这个预处理命令包含了 StdAfx.h 这个文件;而 StdAfx.cpp 这个源文件也用了同样的预处理命令包含了 StdAfx.h 这个文件。因为编译器不会编译 *.h 头文件,因此建立一个名为 StdAfx.cpp 的 *.cpp 文件,这个文件的存在是为了编译一个预编译头文件,因为编译这类 *.h 头文件需要花费大量的时间,因此把 StdAfx.cpp 文件编译成一个预编译头文件,以后每一次编译的时候,就直接从硬盘里读取进行读取,以节省大量的时间。P.S. 所谓的预编译头文件和目标模块是一回事吧?
但是我现在 Hello.cpp 这个文件也用了 #include "stdafx.h" 这个预处理命令包含了 StdAfx.h 这个文件,因此我想编译器在进行预处理的时候会把 StdAfx.h 这个文件嵌入到 Hello.cpp 文件的特定的位置。因此在编译 Hello.cpp 的时候也会把 StdAfx.h 这个文件的源程序部会编译一遍,这会花费大量的时间。按照编译器在 Make 的时候所遵照的规则,即会比较文件的更新时间,对最近修改过的源文件进行编译,所以如果修改了 Hello.cpp ,那么编译器应该会把 Hello.cpp 这个源程序重新编译一次,同时也把嵌入其中的 StdAfx.cpp 文件部分编译一次。这样的话,还是花费了大量的时间,我没有看到 StdAfx.cpp 这个文件所编译成的预编译头文件在什么地方用到了,看不出来这个过程中怎么节省时间了。还有,既然已经把 StdAfx.cpp 文件编译成预编译头文件了,为什么还要在 hello.cpp 文件中用#include "stdafx.h" 这个预处理命令包含了 StdAfx.h 这个文件呢?既然已经包含了 StdAfx.h 这个文件了,那么为什么还要需要 StdAfx.cpp 文件,把它编译成
预编译头文件呢?这个预编译头文件和哪些文件连接呢?这个简单的工程中只有 Hello.cpp ,StdAfx.cpp 和 StdAfx.h 这几个文件,而 Hello.cpp 这个源文件已经包含了 StdAfx.h 文件,因此我觉得没有必要把用 StdAfx.cpp 文件编译成的预编译头文件和用 Hello.cpp 文件编译成的目标文件进行连接吧?
---------
学习 VC++ 中,总是被这一个问题所困惑,甚至在“深入浅出 MFC ”中也没有找到答案,唯恐自己表述不不清楚,因此打了很多字。请大家指教。谢谢。
...全文
相关推荐
stdafx.h stdafx.cpp
stdafa.h stdafa.cpp
深入理解MFC预编译头文件stdafx.h及stdafx.cpp
MFC,全称为微软基础类库(Microsoft Foundation Classes),是微软提供的一套用于Visual C++的面向对象的编程框架。MFC利用封装的Windows API和类,极大地简化了Windows平台下的应用开发流程。程序员可以借助MFC进行快速开发,构建包含复杂界面和功能的桌面应用程序。MFC不仅仅是一个库,更是一种编程思想,一种让开发者能够在Windows平台上高效工作的工具。预编译头文件stdafx.h是Visual Studio环境下一种常用的编译优化技术。
《StdAfx.h/.cpp文件的用途和功能》
在许多C++项目中,你可能会注意到一个名为"StdAfx.h"(或者其他类似名称)的头文件和一个名为"StdAfx.cpp"(或者其他类似名称)的源文件。因此,在实际开发中,是否使用"StdAfx.h"和"StdAfx.cpp"文件取决于项目的规模和需求。请注意,如果你的项目使用了多个源文件,则每个源文件都需要包含"StdAfx.h"头文件,并且只需要在其中的一个源文件中包含"StdAfx.cpp"即可。首先,创建一个名为"StdAfx.h"的头文件,并将其包含在项目的所有源文件的顶部(即最先包含)。
MFC所包含的头文件stdafx.h及stdafx.cpp
MFC所包含的头文件stdafx.h及stdafx.cpp
头文件stdafx.h
stdafx.h下载,解决预编译问题


