在Visual Studio中禁用或修复#ifdef敏感着色和智能感知

时间:2013-01-29 15:42:52

标签: visual-studio visual-studio-2005 syntax-highlighting

问题:我的语法突出显示和智能感知已损坏。我有一个像这样的C ++源文件:

#include "stdafx.hpp"

#ifdef SOMETHING
do_some_stuff;
#endif

其中stdafx.hpp(项目的预编译头)包含一个.h文件,其中包含:

#ifdef DEFINE_SOMETHING
#define SOMETHING
#endif

DEFINE_SOMETHING在项目的项目属性中定义(在C ++ / Preprocessor下)。

Visual Studio正在失去跟踪,并以纯灰色显示do_some_stuff;(实际上是很多代码行) - 我既没有语法着色也没有IntelliSense。

问题:如何使Visual Studio能够正确(不太可能)这样做,或者关闭它认为是#ifdef'的灰色代码?

(重新排列代码不是一个选项 - 它是一个庞大而复杂的系统,其文件是在各种环境中构建的,Visual Studio只是其中之一。我使用的是Visual Studio 2005,但我有兴趣知道在以后的版本中,这是固定的还是可以解决的。)

4 个答案:

答案 0 :(得分:10)

如果有人仍然感兴趣 - 关闭灰色#ifdef:

  • 转到工具 - >选项
  • 打开文字编辑器 - > C / C ++ - >格式化
  • 取消选中以不同颜色着色非活动代码块

答案 1 :(得分:1)

您描述的问题与VS 2005中的课程相同。由于完全重新设计的Intellisense系统,它在Visual Studio 2010及更高版本中得到修复。这不是直接适用于您的问题,但这里有一些关于底层架构的信息:http://blogs.msdn.com/b/vcblog/archive/2009/05/27/rebuilding-intellisense.aspx

有些事情你可以尝试,一些项目结构的变化可以帮助减少问题的频率,但无论你做什么都会被击中或错过,并且问题最终会再次重现。唯一真正的解决方案是使用更新的IDE。

您可以通过安装VS 2010和Daffodil(http://daffodil.codeplex.com)继续使用VS 2005构建工具,然后使用VS 2010中的v80平台工具集构建项目。这使迁移相当简单,没有需要任何源代码更改。

答案 2 :(得分:1)

由于#define SOMETHING是在stdafx.hpp中定义的,表明它始终定义,因为在项目配置中定义了DEFINE_SOMETHING,在项目配置中明确定义SOMETHING是不可能的?

我曾经在VS2005和2008中遇到过类似的问题,冗余的显式定义有时会有所帮助。

答案 3 :(得分:1)

按照aousov的先前答案,我检查了VSCode并找到了此设置:

C_Cpp:无效区域 控制非活动预处理器块的颜色是否与活动代码不同。如果禁用了IntelliSense或使用“默认高对比度”主题,则此设置无效。

在扩展程序/ C / C ++中

这可能与您使用的版本有关(在我的情况下为1.46.1)。

最好, 杰弗罗伊