为什么在MFC应用程序中,应该首先包含 stdfax.h 文件?

13 浏览
0 Comments

为什么在MFC应用程序中,应该首先包含 stdfax.h 文件?

我想知道为什么每个MFC应用程序都存在这行代码(强制要求将stdafx.h作为每个文件中首个被引入的头文件):

#ifndef __AFXWIN_H__
    #error "include 'stdafx.h' before including this file for PCH"
#endif

这个行为背后的原因是什么?

0
0 Comments

在MFC应用程序中,为什么stdafx.h应该是第一个被包含的文件?

只有在使用预编译头文件(Precompiled Headers,PCH)的情况下,才有这样的要求。而#include "stdafx.h"之前不应该有任何其他内容的原因是:

当源文件中的#include "stdafx.h"之前有其他内容时,Visual C++将不会编译任何在该行之前的代码,除非编译选项/Yu'stdafx.h'未被选中(默认情况下)。编译器会假设该行及之前的所有代码已经被编译过。

这个问题的原因是使用预编译头文件可以加快编译速度,因为预编译头文件中包含了常用的头文件和库文件,可以在每次编译时被重用。而stdafx.h是预编译头文件的默认名称。

解决这个问题的方法就是确保在#include "stdafx.h"之前没有任何其他内容。这样,编译器就能正确地处理预编译头文件,加快编译速度。

总之,当使用预编译头文件时,stdafx.h应该是MFC应用程序中第一个被包含的文件。这样可以确保编译器正确处理预编译头文件,提高编译效率。

0
0 Comments

为什么在MFC应用程序中应该首先包含

在MFC应用程序中,为了实现预编译头文件(PCH)的优势,必须尽早地包含。PCH是一种编译器优化技术,可以减少编译时间。通过预编译,编译器会将这个文件提前编译,从而避免了在源文件中的#include "stdafx.h"之前编译任何代码的开销。除非编译选项/ Yu'stdafx.h'被取消选中(默认情况下是取消选中的),否则Visual C++编译器将假定源文件中包含了该行代码及之前的所有代码都已经编译过。

因此,为了获得PCH的优势,必须在包含层次结构中尽早地包含

以下是一种可能的解决方法:

#include "stdafx.h"
#include <其他头文件>

在MFC应用程序中的源文件的开头,首先包含,然后再包含其他需要的头文件。这样可以确保被尽早地预编译,从而加快编译速度。

总之,为了实现预编译头文件的优势,必须在MFC应用程序中的源文件中尽早地包含。这样做可以减少编译时间,提高编译效率。

0
0 Comments

为什么在MFC应用程序中应该首先包含stdafx.h

在MFC应用程序中,stdafx.h文件包含了在项目中不同文件中使用的公共头文件。虽然不一定非要包含它,但如果不包含它,那么您就必须在整个项目中手动管理所有的头文件,这将导致在不同的文件中重复包含一些头文件。

这种重复包含头文件的问题会导致以下几个问题:

1. 编译时间增加:每次包含头文件时,编译器都要读取和解析该头文件的内容,如果在多个文件中重复包含同一个头文件,将会导致编译时间的增加。

2. 冲突和错误:如果多个文件分别包含了相同的头文件,可能会导致命名冲突或其他编译错误。

为了解决这些问题,引入了stdafx.h文件。使用stdafx.h文件,可以将常用的头文件集中包含在一个文件中,并通过在其他文件中包含stdafx.h来避免重复包含头文件的问题。

在MFC应用程序中,将stdafx.h作为第一个被包含的文件,可以确保在其他文件中使用的公共头文件被正确地包含且不会重复。

总结起来,stdafx.h文件的出现是为了解决在MFC应用程序中重复包含头文件的问题。通过将常用的头文件集中包含在一个文件中,并将其作为第一个被包含的文件,可以避免编译时间的增加、冲突和错误。

0