如何避免预编译头文件

Posted

技术标签:

【中文标题】如何避免预编译头文件【英文标题】:How to avoid precompiled headers 【发布时间】:2011-08-31 18:32:49 【问题描述】:

我正在尝试用 C++ 编译一个简单的 VS 程序作为类的作业。我们只包含 <iostream> 并且我不断收到此错误:

1>Assignment.cpp(15): 致命错误 C1010: 查找预编译头时文件意外结束。您是否忘记将'#include "StdAfx.h"' 添加到您的来源?

我的程序真的这么小......

#include <iostream>
using namespace std;
int main()

    unsigned int day = 30;

    cout << "My Name is John Doe" << endl;
    cout << "My Major is CS" << endl;
    cout << "I was born on day " << day << endl;
    return 0;

我刚刚安装了 Visual Studio Express 2010。我真的很想开始一个空项目,而不是安装所有这些预定义的文件,我认为这会更容易,但我在创建项目时从来没有得到这个选项。有人有什么建议吗?

【问题讨论】:

您需要在项目的设置中关闭使用预编译头文件(您也可以在以后创建新项目时取消选中使用预编译头文件。) 我该如何为未来的项目关闭此功能? 请改进您的问题标题。它并没有非常详细地描述这个问题,而是列出了技术(这就是标签的用途)。 我获得了项目属性,但没有看到预编译的标头。它在语言属性中? 查看 C/C++ -> Precompiled Headers. 【参考方案1】:

您始终可以在项目设置中禁用预编译头文件的使用。

VS 2010 使用说明(其他版本的 VS 应该类似):

选择您的项目,使用“项目 -> 属性”菜单并转到“配置属性 -> C/C++ -> 预编译头”部分,然后将“预编译头”设置更改为“不使用预编译头”选项。


如果您只是想为简单的 C++ 命令行程序(例如在介绍性 C++ 编程课程中开发的程序)设置一个最小的 Visual Studio 项目,您可以创建一个empty C++ project。

【讨论】:

@Howdy_McGee std::cout &lt;&lt; "Press Enter To Continue" &lt;&lt; std::endl; std::cin.get(); 应该会带你到那里。 @André:“Win32 项目”和“Win32 控制台应用程序”模板还提供了禁用预编译头文件的选项。无论如何,我的观点是,由于他的问题与预编译头文件有关,而预编译头文件与标准合规性是正交的,因此提出标准合规性是一种误导。 @ildjarn:但问题不在于预编译的头文件。真正的问题是 OP 在项目向导对话框中选择了错误的项目类型和/或选项。由于 OP 使用看似简单的标准 C++ 编写学校作业,因此最有助于养成在 Visual Studio 中编写符合标准的 C++ 程序的良好习惯的项目类型是空项目类型。因此,我提到了标准合规性。 @André: traits::eof() 真的,不是-1 Downovote 的工具提示说:“这个答案没用”。那当然是相对的。同样,downvote 可以随时撤销。感谢您改进答案。【参考方案2】:

您可以通过从 Visual C++ 项目的“常规”组中选择“空项目”来创建一个空项目(也许 Express 中不包含该项目模板?)。

要解决您已有项目中的问题,请打开项目属性并导航到:

Configuration Properties | C/C++ | Precompiled Headers

并为“Precompiled Header”选项选择“Not using Precompiled Headers”。

【讨论】:

根据msdn.microsoft.com/en-us/library/ms235516%28v=VS.100%29.aspx,Empty Project 模板在 Express 中。让我知道它是否不显示给你。我发现它比任何其他项目模板更适合用于设置快速、简单、小型、独立的测试项目。【参考方案3】:

.cpp 文件配置为使用预编译头,因此必须首先包含它(在 iostream 之前)。对于 Visual Studio,它的名称通常是“stdafx.h”。

如果您的项目中没有 stdafx* 文件,您需要进入该文件的选项并将其设置为“不使用预编译头文件”。

【讨论】:

如何关闭预定义的标题? 右键单击.cpp文件并选择属性,然后在树形视图中找到C/C++ / Precompiled Headers并更改Precompiled Header选项。 批量选择 + 鼠标左键选项也很方便。在解决方案资源管理器中选择一堆cpp源文件,如上关闭。【参考方案4】:

尝试在#include "iostream"之前添加#include "stdafx.h"

【讨论】:

这是一个课堂作业——我只能使用 iostream,所以这个解决方案不起作用 @Howdy:从技术上讲,谢尔盖是正确的;您已经创建了一个使用预编译头文件的项目集,但您没有 #include 它。您真正需要做的是创建一个空项目或消除对预编译头文件的依赖。 @Ed S.:虽然是对的,但只是治标不治本。隐藏的问题是“为什么我不能编译我在课堂上编译的同一个程序”? 那个问题的答案是“在课堂上,项目没有使用预编译的头文件”。

以上是关于如何避免预编译头文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在不关闭预编译头文件的情况下修复 C1010 错误?

如何在不扩展包含的头文件的情况下预编译 C 源文件?

C++ 预编译头文件已禁用

使用预编译头提高编译速度

预编译头文件 - 选择文件

预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)