我的 Visual C++ 编译器编译过时的源代码
Posted
技术标签:
【中文标题】我的 Visual C++ 编译器编译过时的源代码【英文标题】:My Visual C++ compiler compiles out of date source 【发布时间】:2010-09-26 13:33:34 【问题描述】:我是一名初学者,开始使用 Microsoft Visual C++ Express 2010 进行 Windows 编程。我使用本机代码创建了一个新的 C++ 应用程序,而不是托管或 MFC。我让 Visual Studio 为我创建了基本的 windows 代码来创建一个带有简单菜单的窗口 (chat.cpp)。我修改了这个文件,我能够正确编译并看到我的更改生效。
现在,我向解决方案 (intro.cpp) 添加了一个源文件,我将其包含在我的标题中并从 chat.cpp 中调用。这似乎工作得很好,但有一个问题。编译器似乎不会偶尔应用我的代码更改:我进行了各种编辑,重新编译,“旧”代码似乎正在运行。然后,过了一会儿,在我只做了一个微小的修改之后,编译器似乎“赶上了”并运行了新代码,包括我之前所做的所有更改。
是否有某种缓存?我是否需要告诉编译器要编译哪些文件以及从目标文件中链接哪些文件?我将文件添加到解决方案时是否出错?
【问题讨论】:
【参考方案1】:intro.cpp
有头文件吗?这也在你的解决方案中吗?
我很难想象这样一个成熟的 IDE 的这个区域会有一个 bug,所以我会先检查你的文件列表。确保解决方案资源管理器显示所有您已添加并正在编辑的文件。这是 VS 用来确定需要重建的列表。
编辑:我承认从你的描述中我不清楚为什么它现在会失败。但是,通常头文件不包含代码,它以相反的方式工作(类模板头文件除外,例如 STL 头文件)。有一些关于利弊的讨论here。对我来说,支持包含头文件的代码而不是相反的最有说服力的论点是头文件包含接口,而代码文件包含实现。
我会尝试将您的代码重组为更传统的结构,其中 intro.cpp 包含 intro.h 和它需要的任何其他内容,chat.cpp 也是如此。然后你的编译单元是 intro.cpp 和 chat.cpp,它们依赖于相关的头文件,所以只要它们在解决方案资源管理器中正确列出,都应该工作。您可以清理构建依赖项以避免重复并缩短构建时间。
【讨论】:
我有一个 'chat.h' 文件,其中包括 'chat.cpp' 和 'intro.cpp' 文件。没有单独的“intro.h”文件。我不确定我是否正确地进行了文件分离,这似乎是我自己的问题,而不是编译器的问题;我希望编译器知道如何处理这个问题。解决方案资源管理器在“源文件”列表下正确显示“intro.cpp”,就像它显示“chat.cpp”一样。以上是关于我的 Visual C++ 编译器编译过时的源代码的主要内容,如果未能解决你的问题,请参考以下文章
编译器不遵循 Visual Studio C++ 中的符号链接
如果无法创建 vcxproj 文件,是不是可以将 MSBuild 用作带有 Visual Studio 代码的 C++ 编译器?
如何在我自己的代码中使用 Visual C++ 在不运行静态代码分析的情况下导致 SAL 编译器警告
Visual Studio 2005 C++ 编译器比 Visual Studio 6 编译器慢?