Visual studio Visual Studio灰显错误#ifdef';d C/C+中的段落+;代码 我正在研究一个大型的、继承的C++(实际上,大部分是C)项目,它是在VisualStudio 2008中开发和维护的。从技术上讲,用VisualStudio的术语来说,它是一个由八个“项目”组成的“解决方案”,而其中的难点似乎就在于此

Visual studio Visual Studio灰显错误#ifdef';d C/C+中的段落+;代码 我正在研究一个大型的、继承的C++(实际上,大部分是C)项目,它是在VisualStudio 2008中开发和维护的。从技术上讲,用VisualStudio的术语来说,它是一个由八个“项目”组成的“解决方案”,而其中的难点似乎就在于此,visual-studio,visual-studio-2008,visual-c++,Visual Studio,Visual Studio 2008,Visual C++,我相信你们大多数人都知道,VisualStudio会将它认为是“如果定义”的代码置灰。然而,我发现,对于不同的项目,它似乎并没有正确地做到这一点。为了简单起见,让我们把它们叫做Proj1,Proj2。。。项目8。当我在处理Proj5的Win32调试配置时,我希望Proj5的C/C++预处理器属性配置中定义的宏能够确定哪些是灰色的(或者至少有一些简单的方法可以做到这一点)。相反,我似乎看到了基于Proj1属性的视图。也就是说,如果Proj1定义了一些消除部分代码的预处理器宏,那么即使在处理Proj

我相信你们大多数人都知道,VisualStudio会将它认为是“如果定义”的代码置灰。然而,我发现,对于不同的项目,它似乎并没有正确地做到这一点。为了简单起见,让我们把它们叫做Proj1,Proj2。。。项目8。当我在处理Proj5的Win32调试配置时,我希望Proj5的C/C++预处理器属性配置中定义的宏能够确定哪些是灰色的(或者至少有一些简单的方法可以做到这一点)。相反,我似乎看到了基于Proj1属性的视图。也就是说,如果Proj1定义了一些消除部分代码的预处理器宏,那么即使在处理Proj5时,我也会看到该部分变灰。Proj5的宏对我看到的没有任何影响

是的,我做了一个完整的清理和构建(实际上有几个,甚至将所有内容都保存到SVN,并在一个新的顶级文件夹中开始),所以我很确定这不是因为旧构建生成的一些残留文件。我很确定VisualSourceSafe在其他方面正确地“理解”了上下文,因为(1)构建菜单包含与Proj5相关的选项,而不是Proj1;(b) 项目菜单底部是“Proj5属性…”而不是“Proj1属性…”;(c)毫无疑问,#ifdef在构建的程序中起作用:存在主要的功能差异,正如我所期望的那样



添加于2010年9月27日我仍然没有答案,所以让我用另一种方式来尝试:假设我已经成功运行了构建(我已经运行了),那么除了当前所选项目的预处理器属性和配置(以及,如下所述,单个文件的属性和配置)之外,还有什么其他内容吗,但在本例中这是没有意义的这应该会影响哪些代码是灰色的?

请查看是否可以为各个文件设置这些预处理器指令。您可以通过右键单击源文件并从关联菜单中选择“属性”来完成此操作。认为指令可以为单个文件设置,而不仅仅是为项目设置,这有点违反直觉


如果这样做没有帮助,最好的办法可能是使用文本编辑器在每个项目文件中查找问题预处理器定义,以便更好地了解可能发生的情况。

VS2010应该有助于解决这一问题。在VS2008中,无编译浏览缓存是在预处理之后完成的,因此它只能容纳一组宏定义


我不相信“Build Clean”或“Rebuild”会删除.ncb文件,因为它们根本不是构建过程的一部分。我知道手动删除这些文件会修复各种奇怪的行为,但我担心在您的情况下,这不会是一个持久的解决方案(基于单个配置,.ncb文件仍然会被填充。)

将该项目作为启动项目,删除并重新添加有问题的预处理器定义

详情:
我发现了一个过程,可以在发生这种情况时(至少暂时)修复我的MFC项目。首先,我将正在进行的项目设置为启动项目。通过右键单击解决方案资源管理器中的项目并选择“设置为启动项目”来完成此操作。然后我进入项目的预处理器定义,删除未触发的定义,然后单击OK。几秒钟后,您将在右下角看到一个小进度条。完成后,返回项目的预处理器定义并再次添加,然后单击“确定”。小进度条再次完成后,您应该会看到正确的代码再次处于活动状态。

Nope(参考预处理器指令)。好主意,如果是这样的话,我可能会错过它,但是在单个文件的级别上没有设置预处理器属性。我很久以前就和jEdit一起在那里查看过项目文件了。我什么也没找到,但我不能发誓我不会忽略任何东西。我很想知道有人认为我可能在寻找什么。是否存在Visual Studio无法修改的中间文件,因为它已签入源代码管理?或者,如果手动删除所有中间文件并重新启动VS,问题会消失吗?您可能已经考虑过这两个方面了。我的源代码管理是SVN,所以所有文件都可以自由修改。我会看到(通过乌龟SVN中显示的符号)文件与上次提交的版本不同,但是(与VSS的典型情况不同)文件在开发人员机器上不是只读的。所以,不,这不可能是现在发生的事。如果我一直在做这个项目的人决定升级到VS2010,我会看看你是否正确……这个项目在过去(大约5年)至今,我无法检查这是否能解决我的问题。毫不奇怪,我已经有一段时间没有使用VisualStudio2008了。但是谢谢你的回答,我希望它能帮助其他人。