C:在Visual Studio和Eclipse+MinGW中预编译的头文件

C : Pre-compiled header file in Visual Studio and Eclipse+MinGW

本文关键字:编译 文件 Eclipse+MinGW Visual Studio      更新时间:2023-10-16

我目前正在为我的C++项目使用Visual Sstudio 2010和Eclipse+MinGW。我经历过不同的编译器行为,这需要你的解释。这里有一个例子:

假设我有a.ha.cpp。我已经预编译了头文件(即VS中的stdafx.h和Eclipse中的precomp.h(我为Eclipse创建了一个))。我将在预编译的头文件中包括一些基本的头文件(例如,opencv中的core.hpp)。在a.ha.cpp中,我将使用在基本头文件中声明的一些类(例如,opencv中的Mat),这些类包含在预编译的头文件中。

对于VisualStudio2010,我必须将stdafx.h放在每个.cpp文件中(如链接中所示)。所以在a.cpp中,我一开始就有这个:

#include "stdafx.h"
#include "a.h"

此外,我a.h中包含stdafx.h。我原以为编译器找不到在基本头文件中声明的类,但事实证明,在VS下编译很好。根本没有错误。

对于Eclipse+MinGW,我确实喜欢这样:在a.h中,我将#include "precomp.h"放在开头。在a.cpp中,我放置#include "a.h"(正如一些朋友所说,这是包含头文件的C++标准方式)。经过编译,这是没有错误的,这是毫无疑问的。但是,如果我的操作与我为Visual Studio所做的操作类似,即我a.h中包含precomp.h。将出现错误,表明某些类未在此范围内声明。As concerned by @MSalters, I should **highlight** that both a.h and a.cpp contain proper declarations and definitions.

所以有人能帮我解释VS和Eclipse+MinGW的区别吗?非常感谢。

预编译头是一种效率衡量标准。如果编译器使用正常方法编译代码,则代码应该仍然有效。特别是,您的Visual C++代码应该在Eclipse上编译,反之亦然。

我强烈怀疑您的问题出在Eclipse方面。为什么a.cpp实际上是空的?它应该包含a.h中所有声明的定义

如果你包含"precomp.h",它可能应该在"a.h"的内容之前。一种是按此顺序包含两个标头(Visual Studio样式),另一种是在"a.h"中的任何声明之前包含"precomp.h"。(MinGW样式)

MinGW中预编译的规则稍微宽松一些,因为它预编译较少。